初入数仓坑,搭建hadoop集群折腾了几天险些让我崩溃,好歹是让我看到了结果:
当然虽然过程坑了点耗费了相当心力,但好处是对配置的理解更明白了些,当然流程更是烂熟于心了。下面就开始总结吧:免密通信就不提了需要的话可以直接戳http://blog.youkuaiyun.com/qq_29186199/article/details/78428498。
首先说下环境,我是在centos7下面安装的二进制hadoop包(上链接:http://hadoop.apache.org/releases.html),如下图:
1、我将所需要的文件解压到了/usr/local/software(该文件是我自己创建放下载的软件包),解压后放到local目录下并更名Hadoop,jdk8,如图:
2、接下来配置环境变量(知道肯定有人手懒,贴码),如下图:
(只看java与hadoop环境变量配置)
#java
export JAVA_HOME=/usr/local/jdk8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib/native
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
写入配置信息之后别忘了source /etc/profile
使配置生效。
3、nano /etc/hosts
进入该文件编辑主节点与子节点信息,我的节点信息如下:
事实上,这里只要写主机IP或者主机名(hostname可以查看主机名,vi /etc/hostname可以永久修改主机名,其他方法都更改的话这个方法优先级别最高,自测欢迎指正)其一就可以,都写的话也不错。
4、接下来就是配置Hadoop文件了,我用的是root账户所以各文件无所谓权限不够的问题了(自己玩的嘛/尴尬笑),首先进入Hadoop主目录(我的cd /usr/local/hadoop
):
创建新文件tmp和hdfs以及hdfs下面的name和data文件夹上命令:
mkdir {tem,hdfs} , cd hdfs , mkdir {name,data}
上图(总结嘛怎么可能是实时的):
5、接下来配置文件,根据个人需要主要有以下几个,不敲了上图:
接下来一个一个来:
vi core-site.xml
<configuration>
<property>
<final>true</final>
<!--默认文件系统的名字,URL形式-->
<name>fs.defaultFS</name>
<value>hdfs://192.168.233.128:9000</value>
</property>
<property>
<!--Hadoop临时目录,其他目录会基于此目录,是本地目录-->
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<final>true</final>
</property>
<property>
<!--读写文件时使用的缓存大小,大小应该是内存Page的倍数-->
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<!--本地磁盘目录,用于NameNode存放fsimage文件,可以设置多个,一个坏了用另一个,但是如果设置了HA建议设置一个-->
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hdfs/name</value>
</property>
<property>
<!--本地磁盘目录,HDFS存储数据块的地方-->
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hdfs/data</value>
</property>
<property>
<!--数据块副本-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--SecondNameNode的http服务地址。端口为0的话服务随机选择一个空闲端口,使用了HA的话就不再使用SecondNameNode-->
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.233.128:9001</value>
</property>
<property>
<!--HDFS服务通信的RPC地址,该参数必须设置,如果设置,备份结点,数据结点和其他服务将会连接到指定地址-->
<name>dfs.namenode.servicerpc-address</name>
<value>192.168.233.128:10000</value>
</property>
<property>
<!--指定是否在NameNode和DataNode上面指定WebHDFS功能-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
vi mapred.xml(MapReduce的配置文件)
<configuration>
<property>
<!--设置MapReduce执行框架为yarn-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--MapReduce历史服务器地址-->
<name>mapreduce.jobhistory.address</name>
<value>192.168.233.128:10020</value>
</property>
<property>
<!--MapReduce历史服务器wen ui地址-->
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.233.128:19888</value>
</property>
</configuration>
vi yarn-site.xml
<configuration>
<property>
<!--Nodemanager上面运行的附属服务,需要配置成mapreduce_shuffle才可以运行mapreduce-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--对应参考yarn.nodemanager.aux-services-->
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<!--ResourceManager对客户端暴露的地址。客户端向RM提交应用程序,杀死应用程序等-->
<name>yarn.resourcemanager.address</name>
<value>192.168.233.128:8032</value>
</property>
<property>
<!--调度器地址,ResourceManager向ApplicationManager暴露的地址,ApplicationManager通过该地址向RM申请、释放资源-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.233.128:8030</value>
</property>
<property>
<!--RM向NM暴露的地址,NM通过该地址向NM汇报心跳,领取任务-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.233.128:8031</value>
</property>
<property>
<!--RM对管理员暴露的地址,管理员通过该地址向RM发送管理命令-->
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.233.128:8033</value>
</property>
<property>
<!--RM对外WEB UI地址,用户可通过该地址查看集群各类信息-->
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.233.128:8088</value>
</property>
<property>
<!--NM总的可用物理内存,不能小于1024.一旦设置不可在运行中动态修改-->
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</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>
</configuration>
vi hadoop-env.sh
export JAVA_HOME=/usr/local/jdk8/
vi yarn-env.sh
export JAVA_HOME=/usr/local/jdk8
vi slaves
至此主节点配置Hadoop配置完成。
6、把主节点服务器即master主机下的/etc/profile
,hadoop主目录即:/usr/local/hadoop
,和jdk主目录即/usr/local/jdk8
复制到其余各个节点服务器,即:
scp -r /etc/profile 192.168.233.130:/etc/
scp -r /usr/local/hadoop 192.168.233.130:/usr/local/
scp -r /usr/local/jdk8 192.168.233.130:/usr/local/
scp -r /etc/profile 192.168.233.131:/etc/
scp -r /usr/local/hadoop 192.168.233.131:/usr/local/
scp -r /usr/local/jdk8 192.168.233.131:/usr/local/
scp -r /etc/profile 192.168.233.132:/etc/
scp -r /usr/local/hadoop 192.168.233.132:/usr/local/
scp -r /usr/local/jdk8 192.168.233.132:/usr/local/
复制过去之后不要忘记source /etc/profile 使配置生效,另外这里提一下吧,hadoop里面的几个修改的文件各自主机用各自主机的IP(我就在这里面绕不出来了)。
7、第一次启动首先格式化HDFS:
cd /usr/local/hadoop/sbin
hdfs namenode -format
说明:只要看到/usr/local/hadoop/hdfs/name
被格式化成功就没问题了
启动HDFS:start-dfs.sh
。
java自带jps命令验证:
主节点:
子节点:
页面验证:
没毛病
8、至此hadoop的配置基本完成,其他组件有需要再加希望帮到正在焦头烂额的朋友,在此也感谢官方文档和Hadoop构建数据仓库实践,是个好东西。