记录在优快云的第一篇文章,作为小白,希望各位大佬多多指教。该文章的Hadoop完全分布式集群搭建是我同其他两个小伙伴用三台电脑搭建的,记录了我们搭建过程以及遇到的问题。
文章目录
一、前期准备工作
1、系统环境
本集群搭建在Ubuntu16.04下进行,集群搭建均为三台机器,分别为一个主节点(master)与两个从节点(slave01,slave02)。
所用软件版本为jdk1.8.0_301,hadoop2.7.3,zookeeper3.4.5,hbase1.4.8,hive2.3.9,spark2.1.0,flink-1.9.1-bin-scala_2.11,storm1.2.2,eclipse-4.7.0。
2、三台机器互ping
为了区分三台机器,执行sudo vim /etc/hostname
命令修改显示的主机名。master主机节点添加如下内容:master
;同样slave01节点与slave02节点各自加上对应的主机名。配置完成后,重启虚拟机,重启后会看到机器名的变化。
三台机器要在同一局域网下,可以用ifconfig
命令查看各自的IP地址,我们这里三台机器的IP地址分别为:
master(192.168.43.139)
slave01(192.168.43.55)
slave02(192.168.43.25)
用户名均为hadoop。首先修改三台机器的/etc/hosts
文件,添加同样的配置:
127.0.0.1 localhost
192.168.43.239 master
192.168.43.55 slave01
192.168.43.56 slave02
接着通过ping
命令测试三台机器的连通性。
例如在master节点上运行
ping 192.168.43.55
命令来测试能否连接到slave01。
3、配置ssh无密码登录本机和访问集群机器
三台机器运行 ssh localhost
命令测试能否连接到本机localhost,登录成功会显示上一次登录的时间。如果不能登录本地则要安装openssh-server
,并生产ssh公钥:
sudo apt-get openssh-server
ssh-keygen -t rsa -P “”
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_key
在保证了三台机器都能连接到本地后,还需要master主机免密登录slave01和slave02主机,在master主机上执行以下命令,将master的id_rsa.pub
传给两个slave主机:
scp ~/.ssh/id_rsa.pub hadoop@slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@slave02:/home/hadoop/
然后分别在slave01,slave02上运行ls ~
命令查看是否接收到id_rsa.pub
。
确认接受到后,在slave01,slave02主机上执行如下命令:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
之后让master主机免密登录slave01,slave02主机:
ssh slave01
ssh slave02
注意:第一次免密登录需要slave节点密码,之后就不需要了;在执行
ssh slave02
的时候记得先退出已登录的slave01主机。
4、遇到的问题及解决办法
(1) 由于各节点使用的是虚拟机安装的Linux系统,需要更改网络连接方式为桥接网卡模式,才能实现多个节点互连。然而在设置桥接网络的时候,虚拟机就连不上网,查阅资料之后,在VMware的虚拟网络编辑器中还原默认设置,重启之后就能连接上网络了。
(2) 主机与节点连接的过程中,报了detination host unreachabled
的错误,显示连接不上主机,不知道具体是什么原因,然后我们用了同一个热点之后,就成功连接上了。
二、Hadoop分布式集群搭建
1、安装JDK
分别在三台机子上安装jdk,安装成功后编辑~/.bashrc
文件,添加如下内容:
执行
source ~/.bashrc
命令让环境变量立即生效
2、安装Hadoop
直接在master主机上安装hadoop,配置完好后将hadoop发给两个从节点。把下载后的hadoop安装包解压到/usr/local
目录下:
sudo tar -zxvf ./hadoop-2.7.3.tar.gz -C /usr/local #需要进入到hadoop安装包所在目录
cd /usr/local
sudo mv hadoop-2.7.3 hadoop #修改文件名
sudo chown -R hadoop ./hadoop #赋予文件权限
编辑~/.bashrc
文件,添加如下内容:
执行
source ~/.bashrc
让环境变量生效。
3、Hadoop集群配置
(1)修改master主机的slaves文件,位于/usr/local/hadoop/etc/hadoop
文件下,写入如下内容,每行一个
slave01
slave02
(2)修改core-site.xml
文件
(3)修改hdfs-site.xml
文件
(4)修改mapre-site.xml
文件(先把mapred-site.xml.template
复制,再修改文件名)
(5)修改yarn-site.xml
文件
配置好后将master上的/usr/local/hadoop
文件传送到其他两个节点上,由于文件比较大最好先压缩再传送:
tar -zcf ~/hadoop.master.tar.gz ./hadoop
cd ~
scp ./Hadoop.master.tar.gz slave01:/home/Hadoop
scp ./Hadoop.master.tar.gz slave01:/home/hadoop
传送完成后在slave01,slave02上执行:
sudo tar -zxvf ~/hadoop.master.tar.gz -C /usr/local
cudo chown -R hadoop /usr/local/Hadoop
(6)启动hadoop集群
在master主机上执行:
cd /usr/local/Hadoop
bin/hdfs namenode -format
sbin/start-all.sh
运行成功后,分别在三台机子上输入jps
命令,可看到:
master节点:
两个slave节点:
4、遇到的问题及解决办法
master运行结果有DataNode
,反而没有NameNode
:
原因:存在DataNode
是因为在修改slaves文件时,没有把里面的localhost
删掉,没有NameNode
是一开始配置hdfs-site.xml
文件时没有加入下列内容:
三、Zookeeper完全分布式安装
1、安装zookeeper
在master主机上安装zookeper,配置好后复制给其他节点
sudo tar -zxvf ./zookeeper-3.4.5.tar.gz -C /usr/local
cd /usr/local
mv zookeeper-3.4.5 zookeeper
sudo chown -R hadoop ./zookeeper
2、配置环境
vim ~/.bashrc
输入source ~/.bashrc
命令使环境变量生效
创建data文件目录:
mkdir -p /usr/local/zookeeper/zkData
进入/usr/localzookeeper/conf
目录下修改配置文件:
cp zoo-sample.cfg zoo.cfg
vim zoo.cfg
添加如下配置:
3、设置当前zookeeper的权值
进入到/zkDate
目录下创建文件myid
:
cd /usr/local/zookeeper/zkData
vim myid
master写入权值1
,此1对应的是server.1
中的1
,每台机器的myid
的值对应server.
后面的数字
将master主机上的zookeeper复制给其他两个节点:
cd /usr/local
sudo tar -zcf ./zookeeper.tar.gz ./zookeeper
scp ./zookeeper.tar.gz hadoop@slave01:/usr/local
scp ./zookeeper.tar.gz hadoop@slave02:/usr/local
复制完成后,slave01与slave02解压压缩包,Slave01与slave02修改myid
文件,Slave01写入2
,slave02写入3
4、启动zookeeper
每台机子都要启动:
cd /usr/local/zookeeper
./bin/zkServer.sh start
输入jps
后,master与slave节点都出现了QuorumPeerMain
进程:
5、遇到的问题及解决办法
使用scp
命令时,遇到了无法传输的问题,我们首先是把sshd_config
文件中的PermitRootLogin
后面的no
改为yes
,然后重启ssh
服务。
但是改完之后还有权限错误,后来发现是因为一开始没有将hadoop用户授权给zookeeper,最后使用了chown
命令授权,再传输文件,成功传送。
四、HBase完全分布式安装
1、安装HBase
(1)解压授权
sudo tar -zxvf ./hbase-1.4.8-bin.tar.gz -C /usr/local
cd /usr/local
mv hbase-1.4.8-bin hbase
sudo chown -R hadoop ./hbase
(2)配置环境变量
vim ~/.bashrc:
source ~/.bashrc
使环境变量立即生效
2、修改配置文件
cd /usr/local/hbase/conf
配置regionservers
,并加入两个从节点的主机名:
vim regionservers
slave01
slave02
修改hbase-site.xml
文件
拷贝hdfs-site.xml
,core-site.xml
到hbase的conf
目录下
cp /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hbase/conf
cp /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hbase/conf
将hbase复制给从节点
cd /usr/local
sudo tar -zcf ./hbase.tar.gz ./hbase
scp -r ./hbase.tar.gz hadoop@slave01:/usr/local
scp -r ./hbase.tar.gz hadoop@slave02:/usr/local
3、启动hbase集群
要先启动hadoop与zookeeper
在master上启动hbase
cd /usr/local/hbase
./bin/start-hbase.sh
启动成功后可以看到master节点上多了HMaster
进程:
Slave01,slave02节点上多了HRegionServer
进程:
五、Hive完全分布式安装
1、三个节点上安装MySQL、创建元数据库
sudo apt-get update
sudo apt-get install mysql-server
启动mysql服务器
server mysql start
进入mysql界面创建hive数据库
mysql -u root -p
mysql>create database hive
配置mysql允许hive接入
master节点配置:
mysql>grant all on “.” To hive@localhost identified by ‘hive’;
mysql>flush privileges;
slave节点配置:
mysql>grant all on “.” To hive@slave01(slave02) identified by ‘hive’;
mysql>flush privileges;
2、master节点上安装hive
(1)解压安装包到/usr/local
目录下
sudo tar -zxvf ./apache-hive-2.3.9-bin.tar.gz -C /usr/local
cd /usr/local
sudo mv apache-hive-2.3.9-bin hive
sudo chown -R hadoop ./hive
(2)配置环境变量
vim ~/.bashrc
source ~/.bashrc
使环境变量生效
(3)在hive目录下创建iotmp
目录
mkdir iotmp
(4)修改配置文件hive-site.xml
文件
cd /usr/local/hive
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
添加如下内容:
将所有的
${system:java.io.tmpdir}
替换成/usr/local/hive/iotmp
,最好修改,防止出错。
(5)修改hive-env.sh
文件,添加如下内容:
(6)将mysql的jar包拷贝到hive的lib目录下
这里用的是mysql-connector-java-5.1.40
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/hive/lib
(7)将hive目录复制给从节点
cd /usr/local
scp -r ./hive hadoop@slave01:/usr/local
scp -r ./hive hadoop@slave02:/usr/local
(8)复制完成后配置从节点的文件
从节点修改hive-site.xml
文件
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
localhost改为对应的主机名
3、启动hive集群
三台机子都要启动
主机启动前先初始化元数据
cd /usr/local/hive
./bin/schematool -dbType mysql -initSchema
初始化成功后启动hive
./bin/hive
启动成功后有RunJar
进程
hive>show databases;
4、遇到的问题及解决办法
(1)master启动成功但是执行命令时报错
ERROR exec.DDLTask: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
最后,修改conf/hive-site.xml
中的“hive.metastore.schema.verification
”的值改为false
,即可以执行hive命令。
(2)master节点hive启动成功,而slave01与slave02节点均启动失败,输入show databases
命令后报错提示未初始化;
(3)master节点初始化又报错
原因:之前初始化过了,不能反复初始化。
解决方法:删除MySQL中创建的hive数据库,再重新创建,之后初始化元数据再启动hive,master与slave节点均可启动和执行命令。
总结:在启动hive之前要先初始化元数据,之后master与slave节点再开启,顺序不能颠倒。
六、Spark完全分布式安装
1、安装Spark
(1)解压安装包
sudo tar -zxvf ./spark-2.1.0-bin-without-hadoop.tgz -C /usr/local
cd /usr/local
mv spark-2.1.0-bin-without-hadoop spark
sudo chown -R hadoop ./spark
2、配置文件
cd /usr/local/spark/conf #进入conf文件
cp spark-env.sh.template spark-env.sh #复制spark-env.sh.template并改名为spark-env.sh
cp slaves.template slaves
(1)修改
spark-env.sh
(2)修改slaves
文件
(3)将安装包复制给其他文件
scp -r /usr/local/spark hadoop@slave01:/usr/local
scp -r /usr/local/spark hadoop@slave02:/usr/local
3、启动spark集群
在master上启动
cd /usr/local/spark
./sbin/start-all.sh
启动成功后可看到master节点多了Master
进程,slave01与slave02节点多了Worker
进程:
启动spark-shell
三个节点分别进入bin目录
cd /usr/local/spark/bin
./spark-shell
启动成功后截图:
七、Flink完全分布式安装
1、安装Flink
sudo tar -zxvf ./flink-1.9.1-bin-scala_2.11.tgz -C /usr/local
cd /usr/local
mv flink-1.9.1 flink
sudo chown -R hadoop ./flink
2、在master节点上配置flink
进入conf
目录,编辑flink-conf.yaml
文件
cd /usr/local/flink/conf
vim flink-conf.yaml
编辑如下内容(注意,冒号后面一定要有一个空格)
配置好后flink复制给其他节点
scp -r /usr/local/flink hadoop@slave01:/usr/local
scp -r /usr/local/flink hadoop@slave02:/usr/local
3、配置slave节点信息
cd /usr/local/flink/conf
vim slaves
每台机器添加从节点的主机名或IP(把原本的localhost删掉)
slave01添加slave01
slave02添加slave02
4、启动flink集群
在master节点上启动flink
cd /usr/local/flink
./bin/start-cluster.sh
启动成功后可看到master节点:
slave节点:
八、Storm完全分布式安装
1、安装Storm
解压压缩包
sudo tar -zxvf ./apache-storm-1.2.2.tar.gz -C /usr/local
cd /usr/local
mv storm-1.2.2 storm
sudo chown -R hadoop ./storm
2、配置环境变量
(1)vim ~/.bashrc
(2)进入conf
目录修改storm.yaml
文件
cd /usr/local/storm/conf
vim storm.yaml
编辑如下内容:
(3)分发到其他节点
scp -r /usr/local/storm hadoop@slave01:/usr/local
scp -r /usr/local/storm hadoop@slave02:/usr/local
3、启动storm
启动前要先启动hadoop与zookeeper集群
(1)在master启动nimbus、supervisor、core、logviewer
进程
cd /usr/local/storm
./bin/storm nimbus &
./bin/storm supervisor &
./bin/storm ui &
./bin/storm logviewer
启动成功截图:
(2)在从节点上启动supervisor、logviewer
进程
cd /usr/local/storm
./bin/storm supervisor &
./bin/storm logviewer &