接上一篇文章
二、 JDK 与 Hadoop 安装配置
2.1 解压 JDK 与 Hadoop(务必用 sudo)
▸ 目标
/usr/local 属主是 root,直接 tar 会报 Cannot mkdir: Permission denied。
▸ 执行
|
SOFT=/opt/downloads; LOCAL=/usr/local |
▸ 预期输出
|
(无输出即成功) |
▸ 验证
|
ls -d /usr/local/jdk /usr/local/hadoop /usr/local/data |
▸ 失败处置
报 Cannot open: No such file or directory 就是权限问题,全部命令前加 sudo -n。
2.2 环境变量(写在 profile.d,不要改 /etc/profile)
▸ 目标
用独立文件避免覆盖从节点已有配置;JDK8 必须放在 PATH 最前。
▸ 执行
|
sudo -n tee /etc/profile.d/00-java.sh >/dev/null <<'EOF' |
▸ 预期输出
|
java version "1.8.0_202" |
▸ 验证
|
echo $JAVA_HOME # /usr/local/jdk |
▸ 失败处置
若 java -version 显示 11.x,说明有其它 profile 覆盖,执行 sudo update-alternatives --set java /usr/local/jdk/bin/java。
2.3 写 6 个 Hadoop 配置文件(逐字复制)
▸ 目标
完全分布式核心:HDFS 地址、副本数、YARN 资源、从节点列表。
▸ 执行
|
CONF=/usr/local/hadoop/etc/hadoop # (1) hadoop-env.sh:JAVA_HOME + 五个 *_USER sudo -n sed -i 's|^#*\s*export JAVA_HOME=.*|export JAVA_HOME=/usr/local/jdk|' $CONF/hadoop-env.sh for kv in HDFS_NAMENODE_USER HDFS_DATANODE_USER HDFS_SECONDARYNAMENODE_USER \ YARN_RESOURCEMANAGER_USER YARN_NODEMANAGER_USER; do grep -q "export $kv" $CONF/hadoop-env.sh || echo "export $kv=dubhe" | sudo -n tee -a $CONF/hadoop-env.sh >/dev/null done # (2) core-site.xml sudo -n tee $CONF/core-site.xml >/dev/null <<'EOF' <?xml version="1.0" encoding="UTF-8"?> <configuration> <property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property> <property><name>hadoop.tmp.dir</name><value>/usr/local/data/tmp</value></property> <property><name>hadoop.proxyuser.dubhe.hosts</name><value>*</value></property> <property><name>hadoop.proxyuser.dubhe.groups</name><value>*</value></property> </configuration> EOF # (3) hdfs-site.xml(★ rpc/http-bind-host 必写,否则 Ubuntu 默认的 # 127.0.1.1 会把 NameNode 绑到回环,从节点连不上) sudo -n tee $CONF/hdfs-site.xml >/dev/null <<'EOF' <?xml version="1.0" encoding="UTF-8"?> <configuration> <property><name>dfs.replication</name><value>3</value></property> <property><name>dfs.namenode.name.dir</name><value>file:///usr/local/data/name</value></property> <property><name>dfs.datanode.data.dir</name><value>file:///usr/local/data/data</value></property> <property><name>dfs.namenode.http-address</name><value>master:9870</value></property> <property><name>dfs.namenode.secondary.http-address</name><value>master:50090</value></property> <property><name>dfs.permissions.enabled</name><value>false</value></property> <property><name>dfs.namenode.datanode.registration.ip-hostname-check</name><value>false</value></property> <property><name>dfs.namenode.rpc-bind-host</name><value>0.0.0.0</value></property> <property><name>dfs.namenode.http-bind-host</name><value>0.0.0.0</value></property> </configuration> EOF # (4) mapred-site.xml sudo -n tee $CONF/mapred-site.xml >/dev/null <<'EOF' <?xml version="1.0" encoding="UTF-8"?> <configuration> <property><name>mapreduce.framework.name</name><value>yarn</value></property> <property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value></property> <property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value></property> <property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value></property> <property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property> </configuration> EOF # (5) yarn-site.xml(★ bind-host 同上,ResourceManager 也受 127.0.1.1 影响) sudo -n tee $CONF/yarn-site.xml >/dev/null <<'EOF' <?xml version="1.0" encoding="UTF-8"?> <configuration> <property><name>yarn.resourcemanager.hostname</name><value>master</value></property> <property><name>yarn.resourcemanager.bind-host</name><value>0.0.0.0</value></property> <property><name>yarn.nodemanager.bind-host</name><value>0.0.0.0</value></property> <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property> <property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value></property> <property><name>yarn.scheduler.minimum-allocation-mb</name><value>512</value></property> <property><name>yarn.scheduler.maximum-allocation-mb</name><value>2048</value></property> <property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value></property> <property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property> <property><name>yarn.log-aggregation-enable</name><value>true</value></property> </configuration> EOF # (6) workers(Hadoop 3.x 只认 workers,不认 slaves) printf "master\nslave1\nslave2\n" | sudo -n tee $CONF/workers >/dev/null sudo -n chown -R dubhe:dubhe /usr/local/hadoop |
▸ 预期输出
|
(无输出即成功) |
▸ 验证
|
cat /usr/local/hadoop/etc/hadoop/workers |
▸ 失败处置
Hadoop 3.x 必须写 workers(不是 slaves),且必须声明 *_USER 变量;Ubuntu 默认的 127.0.1.1 映射会让 NameNode/RM 绑到回环,务必加 rpc-bind-host/http-bind-host/bind-host=0.0.0.0。
2.4 分发到 slave1 / slave2
▸ 目标
从节点需要同样的 JDK、Hadoop、环境变量和数据目录。
▸ 执行
|
# 打包(比 rsync 目录更稳,避免 /usr/local 权限问题) |
▸ 预期输出
|
DEPLOY_OK |
▸ 验证
|
for h in master slave1 slave2; do |
▸ 失败处置
分发后从节点 java/hadoop 找不到 → /etc/profile.d 文件没落地或没 chmod +x;再执行 source /etc/profile。 rsync 传大包偶发截断,用 md5sum 比对后再解压。
三、 格式化与启动集群
3.1 格式化 NameNode(只执行一次)
▸ 目标
首次启动前必须格式化;重复格式化会导致 DataNode clusterID 不一致。
▸ 执行
|
source /etc/profile |
▸ 预期输出
|
Storage directory /usr/local/data/name has been successfully formatted. |
▸ 验证
|
grep clusterID /usr/local/data/name/current/VERSION |
▸ 失败处置
已格式化过的环境不要再执行;若误执行,必须同时清空所有 DataNode 的 /usr/local/data/data 再启动;从节点报 clusterID mismatch 也按此处理。
3.2 启动 HDFS 与 YARN
▸ 目标
一条命令拉起集群,并核对进程。
▸ 执行
|
start-dfs.sh 2>&1 | tail -5 start-yarn.sh 2>&1 | tail -5 sleep 10 # ★ 关键自检:9000/8032 必须监听 0.0.0.0 # 出现 127.0.1.1:9000 说明 /etc/hosts 里主机名映射写错(见第 6 章症状 S) ss -lntp | grep -E ':9000|:8032' jps for h in slave1 slave2; do echo "--- $h"; ssh -n $h "source /etc/profile; jps"; done # 从节点真正注册成功的判据 hdfs dfsadmin -report 2>/dev/null | grep -c "^Name:" # 期望 3 yarn node -list 2>/dev/null | grep -c RUNNING # 期望 3 |
▸ 预期输出
|
Starting namenodes on [master] |
▸ 验证
|
# 从节点应为 DataNode + NodeManager |
▸ 失败处置
只起一半进程 → 看 $HADOOP_HOME/logs/hadoop-dubhe-*.log;常见原因是 workers 未改、免密未通、数据目录无权限。
3.3 HDFS 目录初始化与冒烟测试
▸ 目标
建好数据目录、上传下载一次,证明 HDFS 可写。
▸ 执行
|
hdfs dfs -mkdir -p /user/dubhe /tmp/flume /tmp/data/{raw,clean,label,out} /user/hive/warehouse |
▸ 预期输出
|
hello bigdata |
▸ 验证
|
curl -s -o /dev/null -w "9870=%{http_code} " http://172.20.0.100:9870 |
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/lightningyang/article/details/170411859



