很久之前帮公司搭建了一个hadoopCDH5的demo,现在把详细搭建过程分析一下。因为自己搭了很多遍,因此可以说搭建说明还是很完备的,可以帮助大家借鉴一下
嘿嘿,废话不多说,先上:
一、软件环境准备
1、在Oracle官网下载(网址: http://cn.ubuntu.com/download/)
下载版本: Ubuntu 16.04 LTS(长期支持)版本
2、安装VMware,直接在百度软件中心即可。
新手选用典型模式进行一键安装(自定义模式自己了解)
注意虚拟机网络适配器选择桥接模式,硬件设置如下,需要根据电脑选择配置
3、安装jdk
注意:
下载压缩包到Windows上想要直接拖入到ubantu当中需要安装更新VMware Tools
将拖入的jdk压缩包转移到/opt目录下
sudomv xxx(拖入jdk的目录) /opt
将jdk解压到/opt目录下(一般安装包放置路径)
sudotar -zxvf jdk-7u79-linux-x64.tar.gz jdk1.7.0_79/
建立一个软链接(目的:在配置环境变量或者其他配置文件的时候一个简洁的名字让步骤一目了然,言简意赅)
sudoln -snf jdk-7u79-linux-x64 jdk
4、安装Hadoop
下载地址()
解压步骤跟jdk相似
注意
二、设置ubantu环境
1、设置jdk,hadoop环境变量
sudovi /etc/profile(进入全局配置)
注意:
在~目录下的.bashrc也可以设置环境变量但是也存在很大的不同
/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。这里要在/etc/profile中设定,因为当我们建立hdfs,yarn用户的时候也需要用到这些变量。
2、设置语法高亮
sudovi ~/.vimrc
按照下列设置输入
注意:
如果输入完成之前报错“Sorry,thecommand is not available in this version : syntax on”,可能是因为预装的vim版本太低,所以需要更新vim
输入这个命令:sudo apt-get install vim
3、设置网络适配器
选用桥接模式(重点)
设置静态ip
sudovi /etc/network/interfaces
注意:
1, 虚拟机网卡会有名称上的不同,写入的时候需要将网卡改成自己的网卡
2, dns-nameserver是ping通外网必要的DNS必须要加上,否则就不能ping类似百度等网站
3, 自己了解桥接模式,桥接模式需要三台机器跟windows上的ip在同一个网段,通过ipconfig可以知道windows系统下的ip地址,子网掩码以及网关,然后进行修改。设置如上图。
sudo /etc/init.d/networking restart 重启网络
4、关闭防火墙
serviceiptables stop
http://blog.youkuaiyun.com/cmh477660693/article/details/52759750
5、CDH 要求使用 IPv4,IPv6 不支持,禁用IPv6方法:
6、节点规划
主机 ip 角色
Master 192.168.1.100 NameNode ResourceManager
Slave1 192.168.1.110 DataNode NodeManager
Slave2 192.168.1.120 DataNode NodeManager
三、搭建集群前置步骤
1、创建hadoop用户组,创建hdfs以及yarn用户,将这两个用户加入hadoop用户组
创建hadoop用户组
sudoaddgroup Hadoop
创建hdfs用户加入到hadoop用户组
sudoadduser -ingroup Hadoop hdfs(yarn用户类似)
2、查看是否创建成功
cat/etc/passwd 用户
cat/etc/group 用户组
3、为hdfs、yarn用户添加权限
sudovi /etc/sudoers
4、安装ssh
sudoapt-get install ssh
查看服务是否正确启动
ps-e | grep ssh
5、设置每一台机器自己的主机名为了方便标识
sudovi /etc/hostname
6、设置主机名和其ip的映射关系
sudo vi /etc/hosts
7、新建目录
/tmp/hadoop/hadoop-hadoop
/tmp/hadoop/mapred/system
/tmp/hadoop/mapred/local
/usr/cdh/hadoop/dfs/data
/usr/cdh/hadoop/dfs/name
以上目录修改所有者为hdfs
sudo chown -R hdfs:hadoop/tmp/hadoop
sudo chown -R hdfs:hadoop /usr/cdh/hadoop/dfs
以上目录将同组人权限修改为可读可写
sudo chmod -R g+wr/tmp/hadoop
sudo chmod -R g+wr/usr/cdh/hadoop/dfs
8、建立目录
/opt/hadoopcdh5/logs
设置权限为hadoop组可读可写(可设为777)
四、修改配置文件
sudo vi core-site.xml
<property>
<name>io.native.lib.available</name>
<value>true</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.100:9000</value>
<description>The name of the default file system.Either theliteral string "local" or host:port for NDFS.</description>
<final>true</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop/hadoop-hadoop</value>
</property>
sudo vi hdfs-site.xml
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/cdh/hadoop/dfs/name</value>
<description>Determines where on the local filesystem the DFS namenode should store the name table.If this is a comma-delimited list ofdirectories,then name table is replicated in all of the directories,forredundancy.</description>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/cdh/hadoop/dfs/data</value>
<description>Determines where on the local filesystem an DFS datanode should store its blocks.If this is a comma-delimited list ofdirectories,then data will be stored in all named directories,typically ondifferent devices.Directories that do not exist are ignored. </description>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
sudo vi mapred-site.xml
property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.tracker</name>
<value>hdfs://192.168.1.100:9001</value>
<final>true</final>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>512</value>
</property>
<property>
<name>mapreduce.task.io.sort.factor</name>
<value>100</value>
</property>
<property>
<name>mapreduce.reduce.shuffle.parallelcopies</name>
<value>50</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>/tmp/hadoop/mapred/local</value>
<final>true</final>
</property>
sudo vi yarn-site.xml
<!-- Site specific YARN configuration properties-->
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.1.100:8080</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.100:8081</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.100:8082</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
注意:
原本hadoopcdh5中是没有mapred-site.xml这个文件的,需要通过mapred-site.xml.template这个文件复制一份(sudo cp mapred-site.xml.template mapred-site.xml)
配置完成!
五、复制出两台丛节点
1、克隆出两台机器
2、修改机器中的静态ip地址以及hostname,分配成slave1,slave2,其他保持一致。
六、格式化HDFS文件系统
hdfs namenode -format
七、服务器集群启动与关闭
hdfs集群
启动/关闭名字节点:hadoop-daemon.sh start/stop namenode
启动/关闭数据节点:hadoop-daemon.sh start/stop datanode
yarn 集群
启动/关闭资源管理器:yarn-daemon.sh start/stopresourcemanager
启动/关闭节点管理器:yarn-daemon.sh start/stop nodemanager
验证服务器集群是否搭建成功
1、 输入jps查看是否有node和resourcemanager
2、 在浏览器上输入master的ip:50070(hdfs集群)
3、 在浏览器上输入master的ip:8088(yarn集群)
出现如下两个页面
八、配置免密钥登陆
首先在主节点上面~目录下输入(ls -la)查看有没有.ssh目录
如果没有 ssh hdfs@slave1 登陆一下任意一个从节点就可以得到.ssh目录
在.ssh目录下输入一下命令产生一个私钥跟一个公钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa(rsa)
.ssh目录下会产生两个文件一个id_rsa,一个id_rsa.pub。进入id_rsa.pub复制其中的代码将其粘贴到两个从节点的authorized_keys中(在从节点中.ssh目录下自己创建,从节点中的.ssh目录的生成参照在主节点的步骤)
同时在主节点中.ssh下也建立authorized_keys粘贴公钥中的代码。
注意:
在start-dfs.sh的时候可能会出现 Error: JAVA_HOME is not set and could not be found.
这是因为在/opt/hadoopcdh5/etc/hadoop/hadoop-env.sh下的JAVA_HOME无法解析,因此需要进入
这个文件修改JAVA_HOME也就是之前所设置的/opt/jdk(每个节点都需要修改)
在yarn集群上的免密钥登陆把以上重新操作一遍
免密钥登陆hdfs集群:
start-dfs.sh
免密钥登陆yarn集群
start-yarn.sh
友情提示:搭集群之前首先要熟悉linux系统的三种网络模式。
搭完集群需要体会到分布式的原理
会搭集群了还不是美滋滋~~
第一次写博客,有错误的细节或者阐述还望各位大佬批评指正