文档章节

Hadoop、Spark、Hbase、Hive的安装

老佛爷
 老佛爷
发布于 2017/07/22 23:46
字数 2184
阅读 122
收藏 3
点赞 0
评论 0

        工作中需要使用Hadoop环境,在三节点上搭建了一套Hadoop环境,顺便做下笔记。因为机器内存较低,没有使用CDH,为保证和线上环境一致,使用Hadoop等版本和CDH5.10的一致。

一、环境及软件准备

设置ip地址,hosts,ssh免密登录,scp,sudo,关闭防火墙,yum,ntp时间同步 略。

Java安装 略。

软件选择,这里选择的为CDH5.10中的软件版本。

hadoop-2.6.0.tar.gz
apache-hive-1.1.0-bin.tar.gz
hbase-1.2.0-bin.tar.gz
spark-1.6.0-bin-hadoop2.6.tgz
IP 主机名 节点
192.168.30.100 hadoop1

zk ,NameNode,ResourceManager,NodeManager,

SecondaryNameNode,spark,sparkHistory,HMaster

192.168.30.101 hadoop2 zk,DataNode,NodeManager,spark,HRegionServer
192.168.30.102 hadoop3 zk,DataNode,NodeManager,spark,HRegionServer

二、ZooKeerper 集群安装

1、解压Zookeeper

tar xf zookeeper-3.3.6.tar.gz  -C /home/hadoop
cd /home/hadoop
ln -s zookeeper-3.3.6 zookeeper

2、增加配置文件

(1)bin/zkEnv.sh,配置JDK(可选,如果存在多个JDK)

JAVA_HOME=/home/hadoop/java

(2)进入到zookeeper的conf/中,将zoo_sample.cfg拷贝成zoo.cfg,并添加如下内容:

tickTime=2000
dataDir=/home/hadoop/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888

3、将zookeeper目录复制到其他节点上。

scp -r /home/hadoop/zookeeper  hadoop@hadoop2:/home/hadoop
scp -r /home/hadoop/zookeeper  hadoop@hadoop3:/home/hadoop

4、添加myid文件(每节点都需要)

mkdir data
echo "1" > data/myid

注意,每个节点myid文件要不一致

5、启动并测试

在3个节点上启动ZK服务

[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh  start
JMX enabled by default
Using config: /home/hadoop/zookeeper-3.3.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop1 zookeeper]$ jps -l
10760 sun.tools.jps.Jps
10735 org.apache.zookeeper.server.quorum.QuorumPeerMain

 进入ZK客户端测试

bin/zkCli.sh 

三、Hadoop集群

1、解压软件

tar xf hadoop-2.6.0.tar.gz  
ln -s hadoop-2.6.0 hadoop

2、修改配置文件

(1)、etc/hadoop/hadoop-env.sh,配置JDK(可选,如果存在多个JDK)

export JAVA_HOME=/home/hadoop/java

(2)、core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop/data/tmp</value>
    </property>
</configuration>

(3)、hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/hadoop/data/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/hadoop/data/data</value>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <property>
        <name>dfs.secondary.http.address</name>
        <value>hadoop1:50090</value>
    </property>
</configuration>

(4)、mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

(5)、yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop1</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

(6)、slaves

hadoop1
hadoop2
hadoop3

2、创建目录文件

mkdir -p /home/hadoop/hadoop/data/name
mkdir -p /home/hadoop/hadoop/data/data
mkdir -p /home/hadoop/hadoop/data/tmp

3、复制Hadoop到其他节点

scp -r hadoop hadoop@hadoop2:/home/hadoop
scp -r hadoop hadoop@hadoop3:/home/hadoop

4、/etc/profile.d/hadoop.sh增加环境变量

export HADOOP_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

 5、生效环境变量

source  /etc/profile.d/hadoop.sh

6、初始化HDFS

bin/hadoop namenode -format

7、启动集群

sbin/start-all.sh 

8、测试

bin/hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 5 10

求出pi就ok了

JobList   http://hadoop1:8088

Hdfs         http://hadoop1:50070

四、安装Spark

1、安装Scala

tar xf  scala-2.10.6.tgz -C /home/hadoop/
cd /home/hadoop/
ln -s scala-2.10.6 scala

2、复制Scala到其他节点

scp -r scala hadoop@hadoop2:/home/hadoop/
scp -r scala hadoop@hadoop3:/home/hadoop/

3、/etc/profile.d/scala.sh设置环境变量

export SCALA_HOME=/home/hadoop/scala
export PATH=$PATH:$SCALA_HOME/bin

4、解压Spark

tar xf spark-1.6.0-bin-hadoop2.6.tgz -C /home/hadoop
cd /home/hadoop
ln -s spark-1.6.0-bin-hadoop2.6 spark

5、conf/spark-env.sh设置配置文件

export JAVA_HOME=/home/hadoop/java
export SCALA_HOME=/home/hadoop/scala
export HADOOP_HOME=/home/hadoop/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

6、复制到其他节点

scp -r spark hadoop@hadoop2:/home/hadoop/
scp -r spark hadoop@hadoop3:/home/hadoop/

7、/etc/profile.d/spark.sh设置环境变量

export SPARK_HOME=/home/hadoop/spark
export PATH=$PATH:$SPARK_HOME/bin

8、测试

/home/hadoop/spark/bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode client \
    --driver-memory 1g \
    --executor-memory 1g \
    --executor-cores 2 \
    /home/hadoop/spark/lib/spark-examples-1.6.0-hadoop2.6.0.jar \
    10

求出pi便ok了

如果使用JDK1.8可能报错

异常关键如下

ERROR client.TransportClient: Failed to send RPC 8305478367380188725 to /192.168.30.102:43246: 

java.lang.IllegalStateException: Spark context stopped while waiting for backend

分析:

按照上述配置提供的信息,目测可能给节点分配的内存太小,yarn直接kill掉了进程,导致ClosedChannelException

解决方案:切换成1.7或修改yarn-site.xml,添加下列property

<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>

<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

然后重启Yarn即可。

9、配置Spark History Server

(1)spark-defaults.conf

spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://hadoop1:9000/history
spark.eventLog.compress          true

spark.eventLog.enabled:是否记录Spark事件,用于应用程序在完成后的筹够WebUI。

spark.eventLog.dir:设置spark.eventLog.enabled为true后,该属性为记录spark时间的根目录。在此根目录中,Spark为每个应用程序创建分目录,并将应用程序的时间记录到此目录中。用户可以将此属性设置为HDFS目录,以便History Server读取。

spark.eventLog.compress:是否压缩记录Spark事件,前提spark.eventLog.enabled为true,默认使用的是snappy。

(2)spark-env.sh

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=10 -Dspark.history.fs.logDirectory=hdfs://hadoop1:9000/history"

spark.history.ui.port=18080  调整WEBUI访问的端口号为18080

spark.history.fs.logDirectory=hdfs://hadoop1:9000/history  配置了该属性后,在start-history-server.sh时就无需再显示的指定路径

spark.history.retainedApplications=10   指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除

(2)创建HDFS目录

hadoop fs -mkdir /history

(3)启动进程 

sbin/start-history-server.sh

SparkHistory  http://hadoop1:18080

五、安装HBase

1、解压

tar xf hbase-1.2.0-bin.tar.gz  -C /home/hadoop
cd /home/hadoop
ln -s hbase-1.2.0 hbase

2、hbase-env.sh

export JAVA_HOME=/home/hadoop/java
//告诉hbase使用外部的zk
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/home/hadoop/hbase/logs

3、hbase-site.xml

<configuration>
    <!-- 指定hbase在HDFS上存储的路径 -->
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://hadoop1:9000/hbase</value>
    </property>
    <!-- 指定hbase是分布式的 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <!-- 指定zk的地址,多个用“,”分割 -->
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
    </property>
</configuration>

4、regionservers

hadoop2
hadoop3

5、复制到其他节点

scp -r  hbase  hadoop@hadoop2:/home/hadoop
scp -r  hbase  hadoop@hadoop3:/home/hadoop

6、/etc/profile.d/hbase.sh设置环境变量

export HBASE_HOME=/home/hadoop/hbase
export PATH=$PATH:$HBASE_HOME/bin

7、启动集群

bin/start-hbase.sh

管理界面  http://hadoop1:16010

六、安装HIVE

1、安装MySql

1、安装MySQL
yum install -y mysql-server
2、启动MySQL
service mysqld start
3、root登录新建新用户
mysql -u root -p
root初始密码为空,输入命令后直接回车即可。
mysql> use mysql;
mysql> update user set password = Password('root') where User = 'root';
mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all privileges on *.* to 'hive'@'%' with grant option;
mysql> flush privileges;
mysql> exit;
4、创建数据库
mysql> create database hive;

2、解压

tar xf apache-hive-1.1.0-bin.tar.gz  -C /home/hadoop
cd /home/hadoop
ln -s apache-hive-1.1.0-bin  hive
cd hive
cp conf/hive-log4j.properties.template conf/hive-log4j.properties
cp conf/hive-default.xml.template conf/hive-site.xml

3、/etc/profile.d/hive.sh环境变量

export HIVE_HOME=/home/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH

4、创建Hive数据文件目录:

hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod 777 /tmp
hadoop fs -chmod 777 /user/hive/warehouse

其中/tmp用于存放一些执行过程中的临时文件,/user/hive/warehouse用于存放Hive进行管理的数据文件。

5、配置文件

hive-site.xml(修改如下配置)

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
</property>
 
<property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
</property>
 
<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>username to use against metastore database</description>
</property>
 
<property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
        <description>password to use against metastore database</description>
</property>
 
<property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
        <description>location of default database for the warehouse</description>
</property>

6、添加MySql的jar包

wget http://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar
cp mysql-connector-java-5.1.38.jar  /home/hadoop/hive/lib

7、初始化MySql库

bin/schematool -dbType mysql -initSchema

此时可能会报错

java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

原因是hadoop目录下存在老版本jline,解决方案,将hive下的新版本jline的JAR包拷贝到hadoop下

mv /home/hadoop/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar  /home/hadoop/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar.bak
cp  lib/jline-2.12.jar  /home/hadoop/hadoop/share/hadoop/yarn/lib/

8、启动服务

创建临时文件目录

mkdir /home/hadoop/hive/tmp
nohup bin/hive --service hiveserver2 >> tmp/hive-hiveserver2.log 2>&1 &
nohup bin/hive --service metastore >> tmp/hive-metastore.log 2>&1 &

9、启动Shell测试

bin/hive shell

启动报错的话

Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D

搜索hive-site.xml中所有system:java.io.tmpdir,并指定到/home/hadoop/hive/tmp即可

10、安装管理端

HWI的运行需要依赖两个包:hive-hwi-<version>.jar和hive-hwi-<version>.war,这两个包应该都部署在$HIVE_HOME/lib目录下。但Hive的安装包lib目录下可能没有提供hive-hwi-<version>.war,解决办法很简单,下载Hive的源码,进入源码的\hwi\web\目录下,将该目录下的文件夹和文件压缩成zip包,再重命名为hive-hwi-<version>.war,放到$HIVE_HOME/lib目录下即可。

(1)解压apache-hive-1.1.0-src.tar.gz 

tar xf apache-hive-1.1.0-src.tar.gz 

(2)创建压缩文件

cd apache-hive-1.1.0-src/hwi/web
zip -r hive-hwi-1.1.0.war ./*
cp hive-hwi-1.1.0.war  /home/hadoop/hive/lib

(3)hive-site.xml(修改如下配置)

<property>
       <name>hive.hwi.listen.host</name>
       <value>0.0.0.0</value>
</property>
<property>
       <name>hive.hwi.listen.port</name>
       <value>9999</value>
</property>
<property>
       <name>hive.hwi.war.file</name>
       <value>lib/hive-hwi-1.1.0.war</value>
</property>

(4)启动服务 

复制JDK的tool到HIVE的lib目录(不然进入图形会报错)

Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.

 复制JDK的tool到HIVE的lib目录

cp $JAVA_HOME/lib/tools.jar $HIVE_HOME/lib/

 启动服务

nohup bin/hive  --service hwi >> tmp/hive-hwi.log 2>&1 &

管理界面  http://hadoop1:9999/hwi/

© 著作权归作者所有

共有 人打赏支持
老佛爷
粉丝 6
博文 45
码字总数 60895
作品 0
上海
后端工程师
Hadoop、Spark、HBase与Redis的适用性见解

问题导读: 1.你认为Hadoop适用什么场景? 2.Spark适用于什么场景? 3.HBase与 Redis各有什么特点? 最近在网上又看到有关于Hadoop适用性的讨论[1]。想想今年大数据技术开始由互联网巨头走向...

cuiyaonan2000 ⋅ 05/07 ⋅ 0

Spark Streaming入门

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文将帮助您使用基于HBase的Apache Spark Streaming。Spark Streaming是Spark API核心的一个扩展,支持连续的数据流处理。 什么...

腾讯云加社区 ⋅ 05/16 ⋅ 0

云HBaseSQL及分析-Phoenix&Spark

在2018年1月的数据库直播大讲堂峰会HBase专场,来自阿里云的研发工程师瑾谦和沐远分享了云HBaseSQL以及分析Phoenix&Spark。本文介绍了详细了Phoinix和Spark的架构,适用性以及优缺点,并在最...

HBase技术社区 ⋅ 06/05 ⋅ 0

Hadoop或衰落,但核心组件生命力旺盛!

  【IT168 评论】关于Hadoop生死的讨论已经进入后半场,KPI当前,企业继续专注自己的业务发展,厂商继续包装自己的产品,重心都不再是Hadoop的命运走向。在这之中,我们可能忽略了一些问题...

it168网站 ⋅ 04/28 ⋅ 0

慕课网Spark SQL日志分析 - 1.Hadoop概述

1.Hadoop架构 官方网址 http://hadoop.apache.org/ 对于Apache项目来说,projectname.apache.org Hadoop:hadoop.apache.org Hive:hive.apache.org Spark:spark.apache.org HBase:hbase.apach......

Meet相识_bfa5 ⋅ 06/17 ⋅ 0

哈尔滨大数据培训课程哪个好?从内容教你如何判断

导读 随着大数据飞速发展,大数据将对人类生活产生深远影响,大数据是未来科技浪潮发展不容忽视的巨大推动力量,加上人工智能对大数据技术的需要,使越来越多的人想要从事大数据,但却不知道哈...

hxl0009 ⋅ 04/16 ⋅ 0

HBase 和 Hive 的差别是什么,各自适用在什么场景中?

https://www.zhihu.com/question/21677041/answer/185664626 先放结论:Hbase和Hive在大数据架构中处在不同位置: Hbase主要解决实时数据查询问题 Hive主要解决数据处理和计算问题,一般是配...

chenhao_asd ⋅ 04/24 ⋅ 0

当HBase与云邂逅,又碰撞出了什么样的火花?

摘要:阿里云HBase2.0也就是阿里云即将要上线的ApsaraDB for HBase2.0。它不仅兼容开源HBase2.0,也承载着阿里多年大规模HBase使用的技术积淀,还有广大公有云用户喜欢的商业化功能。在大数据...

萌萌怪兽 ⋅ 06/12 ⋅ 0

[HCNA Cloud]FusionInsight架构与原理

大数据是指无法再一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。 Yarn是Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。...

Grodd ⋅ 04/25 ⋅ 0

阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习 ⋅ 04/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部