需求
前几天某机构老师向我推销大数据课程,看了他们的教学大纲第一阶段就是学“Java SE核心知识”,作为运维觉着现在再学Java有点力不从心啊;而这位老师也表示“没有Java基础,没法学大数据”。于是乎就产生了这样一个想法:对于我们这种没有Java基础的运维人,是否可以在大数据走出一条属于自己路?
那就从此文开始学习起来吧。
集群准备
1.设置hosts及jdk
#所有节点配置
#配置hosts
10.10.10.56 hadoop1
10.10.10.57 hadoop2
10.10.10.58 hadoop3
#jdk
JAVA_HOME=/usr/local/jdk-1.8
export PATH=$JAVA_HOME/bin:$PATH
2.设置ssh免登录
# NameNode 56上需要往其他节点分发文件
ssh-keygen
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
# ResourceManager 57上需要控制其他节点的NodeManager
ssh-keygen
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
3.文件同步
用于将NameNode上更新的文件更新至远程DataNode节点上
#!/bin/bash
#1 获取参数个数,如果没有参数,直接退出
pcount=$#
if (($pcount==0)); then
echo no args
exit
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for ((host=2; host<4; host++));do
echo "====hadoop$host===="
rsync -rvl -e 'ssh -p 1022' $pdir/$fname $user@hadoop$host:$pdir
done
#加到PATH
export PATH=/root/bin:$PATH
#更新方式
xrsync xxxx
4.安装hadoop
tar -zxvf hadoop-2.7.2.tar.gz -C /usr/local
mkdir /App/hadoop
#环境变量vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop-2.7.2
#日志输出目录,默认为$HADOOP_HOME/logs
export HADOOP_LOG_DIR=/App/hadoop/logs
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
集群配置
1.节点规划
角色 | 10.10.10.56 | 10.10.10.57 | 10.10.10.58 |
---|---|---|---|
hdfs | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
yarn | NodeManager | ResourceManager | NodeManager |
其中:NameNode 和 SecondaryNameNode 占用内存1:1,尽量避免同时放在同一节点下。
2.核心配置文件
# 配置core-site.xml
# vim core-site.xml
<configuration>
<!--指定HDFS中NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!--指定Hadoop运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/App/hadoop/data/tmp</value>
</property>
</configuration>
3.hdfs配置文件
# 1.配置jdk
# vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk-1.8
# 2.配置hdfs-site.xml
# vim hdfs-site.xml
<configuration>
<!--修改block副本数,默认为3-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--指定Hadoop辅助名称节点主机-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop3:50090</value>
</property>
</configuration>
4.yarn配置文件
# 1.配置jdk
# vim yarn-env.sh
export JAVA_HOME=/usr/local/jdk-1.8
# 2.配置yarn-site.xml
# vim yarn-site.xml
<configuration>
<!--Reduce获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定YARN的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
</configuration>
5.配置mapred-env.sh
# 配置jdk
# vim mapred-env.sh
export JAVA_HOME=/usr/local/jdk-1.8
# 配置mapred-site.xml
# cp mapred-site.xml.template mapred-site.xml
# vim mapred-site.xml
<configuration>
<!--指定MR运行在YARN上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</configuration>
6.文件同步更新
所有配置文件的修改需要在集群中所有主机上进行同步更新。
xrsync etc/hadoop
群起集群
1.配置slaves
# 56节点上
# vim etc/hadoop/slaves
hadoop1
hadoop2
hadoop3
#该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
#更新文件
xrsync slaves
2.启动
#1.格式化dfs 文件系统
hdfs namenode -format
#2.启动NameNode和DataNode
#在NodeName节点56上启动
sbin/start-dfs.sh
#3.测试
#jps查看进程是否启动
jps
#web查看NameNode
http://10.10.10.56:50070
#4.启动yarn
#在ResourceManager节点57上启动yarn,而不是在NameNode节点上
sbin/start-yarn.sh
3.测试
#hds测试
#hdfs 创建测试目录
bin/hdfs dfs -mkdir -p /hadoop/input
#上传小文件
bin/hdfs dfs -put anaconda-ks.cfg /hadoop/input
#上传大文件
bin/hdfs dfs -put hadoop-2.7.2.tar.gz /hadoop/input
#下载文件
bin/hdfs dfs -get /hadoop/input/hadoop-2.7.2.tar.gz ./
总结
Hadoop不仅是分布式基础架构,更代表着一个完整的生态,让我们从零做起,开启我们的大数据运维之路。