Hadoop+Spark+Hbase部署整合篇
之前的几篇博客中记录的Hadoop、Spark和Hbase部署过程虽然看起来是没多大问题,但是之后在上面跑任务的时候出现了各种各样的配置问题。庆幸有将问题记录下来,可以整理出这篇部署整合篇。
确保集群的每台机器用户名都为cloud(或者一样)
为了避免过多重复的解释,这里仅仅示意了怎么配置,关于配置的详情解释可自行百度,必应之~或者参考:
hadoop2.2.0集群安装和配置
HBase集群的安装部署
Spark(一)– Standalone HA的部署
修改各个节点上的/etc/hosts文件确保ip与主机名的映射关系正确
关闭系统防火墙
service iptables stop
chkconfig iptables off
reboot
配置ssh免密码登陆
在每台机器上都执行下列命令
chmod -R 755 /home/cloud
mkdir ~/.ssh
ssh-keygen -t rsa
之后在cloud1上收集各个机器的公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将公钥拷贝到其他节节点
scp ~/.ssh/authorized_keys cloud2:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud3:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud4:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud5:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud6:~/.ssh/authorized_keys
在每台机器上都执行(很重要,注意配置ssh的时候要使用cloud用户来配置)
chmod -R 700 ~/.ssh
Zookeeper安装:
zk服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致
设置环境变量
vi /etc/profile
新增
export ZOOKEEPER_HOME=/home/cloud/zk
path后新增
:$ZOOKEEPER_HOME/bin
source /etc/profile
保存文件生效
在另外两个节点slave1和slave2上分别设置改环境变量
进入zk目录
在conf目录下,重命名文件
mv zoo_sample.cfg zoo.cfg
编辑该文件,执行vi zoo.cfg
修改dataDir=/home/cloud/zk/data
新增
server.1=cloud4:2888:3888
server.2=cloud5:2888:3888
server.3=cloud6:2888:3888
ticktickTime=20000 (默认)2-20倍的minSessionTimeout与maxSessionTimeout
注: tickTime 心跳基本时间单位毫秒,ZK基本上所有的时间都是这个时间的整数倍。
zk的详细配置见:
zookeeper配置文件详解
创建文件夹mkdir /home/cloud/zk/data
在data目录下,创建文件myid,内容为1
echo 1 > /home/cloud/zk/data/myid
把zk目录复制到slave1和slave2中
scp -r zk slave1:/home/cloud
scp -r zk slave2:/home/cloud
把cloud5中相应的myid的值改为1
把cloud6中相应的myid的值改为2
启动,在三个节点上分别执行命令./zkServer.sh start
检验,在三个节点上分别执行命令./zkServer.sh status
JDK安装
使用root用户
在usr目录下新建java目录。
将jdk上传到linux中
在/usr/java下
chmod 755 jdk-6u45-linux-i586.bin ./jdk-6u45-linux-i586.bin mv jdk1.6.0_45 jdk vi /etc/profile export JAVA_HOME=/usr/java/jdk export PATH=$PATH:$JAVA_HOME/bin source /etc/profile
Hadoop安装
解压Hadoop文件之后,进入conf目录
修改hadoop-env.sh
加入
export JAVA_HOME=/usr/java/jdk
(为了解决网络不好或者其他情况下造成的通信失败,下列有些简单粗暴的配置了连接zk的timeout时间)
修改core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/cloud/hadoop/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>cloud4:2181,cloud5:2181,cloud6:2181</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>6000000</value> </property> <property> <name>ha.failover-controller.cli-check.rpc-timeout.ms</name> <value>6000000</value> </property> <property> <name>ipc.client.connect.timeout</name> <value>6000000</value> </property> </configuration>
修改hdfs-site.xml
<configuration> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>cloud1:9000</value> </property> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>cloud1:50070</value> </property> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>cloud2:9000</value> </property> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>cloud2:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://cloud4:8485;cloud5:8485;cloud6:8485/ns1</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/cloud/hadoop/journal</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value> org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value> </property> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/cloud/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>dfs.qjournal.start-segment.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.prepare-recovery.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.accept-recovery.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.prepare-recovery.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.accept-recovery.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.finalize-segment.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.select-input-streams.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.get-journal-state.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.new-epoch.timeout.ms</name> <value>600000000</value> </property> <property> <name>dfs.qjournal.write-txns.timeout.ms</name> <value>600000000</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>6000000</value> </property> </configuration>
修改mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
修改yarn-site.xml
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>cloud3</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
修改slaves
cloud3
cloud4
cloud5
cloud6
将配置好的hadoop拷贝到其他节点
scp -r ~/hadoop/ cloud2:~/
scp -r ~/hadoop/ cloud3:~/
scp -r ~/hadoop/ cloud4:~/
scp -r ~/hadoop/ cloud5:~/
scp -r ~/hadoop/ cloud6:~/
启动Hadoop之前先启动zk
cd ~/zookeeper/bin/
./zkServer.sh start
查看状态:一个leader,两个follower
./zkServer.sh status
启动journalnode(在cloud1上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)
cd ~/hadoop
~/hadoop/sbin/hadoop-daemons.sh start journalnode
运行jps命令检验,cloud4、cloud5、cloud6上多了JournalNode进程
格式化HDFS(在bin目录下)
在cloud1上执行命令:
./hdfs namenode -format
格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里
我配置的是~/hadoop/tmp,然后将~/hadoop/tmp拷贝到cloud2的~/hadoop/下。
scp -r ~/hadoop/tmp/ cloud2:~/hadoop/
格式化ZK(在cloud1上执行即可,在bin目录下)
./hdfs zkfc -formatZK
启动HDFS(在cloud1上执行)
~/hadoop/sbin/start-dfs.sh
启动YARN(cloud2)
~/hadoop/sbin/start-yarn.sh
注意:hadoop初次格式化之后要将两个nn节点的tmp/dfs/name文件夹同步
Hbase安装
解压之后配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
让hbase节点知道hdfs的映射关系,也可以在hbase-site.xml中配置
修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk //告诉hbase使用外部的zk export HBASE_MANAGES_ZK=false export HBASE_CLASSPATH=/usr/local/hadoop/conf
vi hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://ns1/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>cloud4:2181,cloud5:2181,cloud6:2181</value> </property> <property> <name>hbase.master</name> <value>cloud1</value> </property> <property> <name>zookeeper.session.timeout</name> <value>6000000</value> </property> </configuration>
和hdfs的配置一样,说明hbase的子节点都在哪些机器上
vi regionservers
cloud3
cloud4
cloud5
cloud6
把zoo.cfg 拷贝到 hbase-0.90.3/conf/下
拷贝hbase到其他节点
scp -r ~/hbase/ cloud2:~/
scp -r ~/hbase/ cloud3:~/
scp -r ~/hbase/ cloud4:~/
scp -r ~/hbase/ cloud5:~/
scp -r ~/hbase/ cloud6:~/
将配置好的HBase拷贝到每一个节点并同步时间。
Spark安装
安装scala:
tar –zxvf scala-2.10.5.tgz
mv scala-2.10.5 scala
安装spark:
tar -zxvf spark-1.3.0-bin-hadoop2.3.tgz
mv spark-1.3.1 spark
进入spark目录,修改文件slaves
vi conf/slaves
cloud2
cloud3
cloud4
cloud5
cloud6
修改spark-env.sh
vi conf/spark-env.sh
export SPARK_MASTER_IP=cloud1 export SPARK_WORKER_MEMORY=512m export JAVA_HOME=/usr/java/jdk export SCALA_HOME=/home/cloud/scala export SPARK_HOME=/home/cloud/spark export HADOOP_CONF_DIR=/home/cloud/hadoop/etc/hadoop export SPARK_LIBRARY_PATH=$SPARK_HOME/lib export SCALA_LIBRARY_PATH=SPARK_LIBRARY_PATH export SPARK_WORKER_CORES=1 export SPARK_WORKER_INSTANCES=1 export SPARK_MASTER_PORT=7077 #错误:节点无法加载到hbase包 #处理方式:sh中加入classpath指向hbasejar路径 export SPARK_CLASSPATH=/home/cloud/hbase/lib/* export SPARK_DAEMON_JAVA_OPTS="-Dspark.storage.blockManagerHeartBeatMs=6000000"
spark配置详见:
Spark 配置
将cloud1上配置好的spark和scala通过scp复制到其他各个节点上(注意其他节点上的profile文件也要一致)
各个节点的profile文件内容:
export JAVA_HOME=/usr/java/jdk export HADOOP_HOME=/home/cloud/hadoop export SCALA_HOME=/home/cloud/scala export SPARK_HOME=/home/cloud/spark export HBASE_HOME=/home/cloud/hbase export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
hbase vs mongodb
1.HBase依赖于HDFS,HBase按照列族将数据存储在不同的hdfs文件中;MongoDB直接存储在本地磁盘中,MongoDB不分列,整个文档都存储在一个(或者说一组)文件中 (存储) 2.Mongodb支持二级索引,而hbase本身不支持二级索引(查询) 3.HBase一个region只有一个HRegionServer对外提供服务,一旦这个region无法服务,则查询会失败;MongoDB的shards(类似于region)支持负载均衡,可以实现高可用 (存储) 4.HBase根据文件的大小来控制region的分裂,在hbase内部,存储时,数据按照Row key的字典序(byte order)排序存储;MongoDB根据负载来决定shards的分裂 5.mongodb的update是update-in-place,也就是原地更新,除非原地容纳不下更新后的数据记录。而hbase的修改和添加都是同一个命令:put,如果put传入的row key已经存在就更新原记录,实际上hbase内部也不是更新,它只是将这一份数据已不同的版本保存下来而已,hbase默认的保存版本的历史数量是3。...
- 下一篇
跟我一起hadoop(1)-hadoop2.6安装与使用
伪分布式 hadoop的三种安装方式: Local (Standalone) Mode Pseudo-Distributed Mode Fully-Distributed Mode 安装之前需要 $ sudo apt-get install ssh $ sudo apt-get install rsync 详见:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 伪分布式配置 Configuration 修改下边: etc/hadoop/core-site.xml: <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration> etc/hadoop/hdfs-site.xml: <co...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块