HDFS安装篇
环境准备篇
安装的版本
hadoop-3.2.2.tar.gz
解压安装
# 进入安装包存放目录
cd /opt/packages
# 解压到安装目录
tar -zxf tar -zxvf hadoop-3.2.2.tar.gz -C ../apps/
# 进入安装目录并创建软链接
cd ../apps
ln -s hadoop-3.2.2 hadoop
修改配置文件(根据自身情况改)
hdfs-site.xml
<configuration>
<!--主要的-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dfs/datanode</value>
<description>datanode本地文件存放地址</description>
</property>
<!--主要的-->
<property>
<name>dfs.replication</name>
<value>3</value>
<description>文件副本数</description>
</property>
<!--主要的-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/dfs/namenode</value>
<description>namenode本地文件存放地址</description>
</property>
<!--主要的-->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
<description>是否开启目录权限</description>
</property>
<!--主要的-->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
<description>提供服务的NS逻辑名称,与core-site.xml里的对应</description>
</property>
<!--主要的-->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>hadoop102,hadoop103</value>
<description>列出该逻辑名称下的NameNode逻辑名称</description>
</property>
<!--主要的-->
<!--hadoop102-->
<property>
<name>dfs.namenode.rpc-address.ns1.hadoop102</name>
<value>hadoop102:9000</value>
<description>指定NameNode的RPC位置</description>
</property>
<!--主要的-->
<property>
<name>dfs.namenode.http-address.ns1.hadoop102</name>
<value>hadoop102:50070</value>
<description>指定NameNode的Web Server位置</description>
</property>
<!--主要的-->
<!--hadoop103-->
<property>
<name>dfs.namenode.rpc-address.ns1.hadoop103</name>
<value>hadoop103:9000</value>
<description>指定NameNode的RPC位置</description>
</property>
<!--主要的-->
<property>
<name>dfs.namenode.http-address.ns1.hadoop103</name>
<value>hadoop103:50070</value>
<description>指定NameNode的Web Server位置</description>
</property>
<!--主要的-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop102:8485;hadoop103:8485/ns1</value>
<description>指定用于HA存放edits的共享存储,通常是namenode的所在机器</description>
</property>
<!--主要的-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/dfs/journaldata/</value>
<description>journaldata服务存放文件的地址</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
<description>指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.auto-ha</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--主要的-->
<property>
<name>fs.trash.interval</name>
<value>2880</value>
<description>回收周期</description>
</property>
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>104857600</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>77</value>
</property>
<!--主要的-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
<description>文件块的大小</description>
</property>
<!--DataNode-->
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
<description>相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256</description>
</property>
<!--主要的-->
<property>
<name>dfs.datanode.du.reserved</name>
<value>2147483648</value>
<description>每个存储卷保留用作其他用途的磁盘大小</description>
</property>
<property>
<name>dfs.datanode.fsdataset.volume.choosing.policy</name>
<value>org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy</value>
<description>存储卷选择策略</description>
</property>
<property>
<name>dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold</name>
<value>2147483648</value>
<description>允许的卷剩余空间差值,2G</description>
</property>
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/data/dn_socket_PORT</value>
</property>
</configuration>
core-site.xml
<configuration>
<!--主要的-->
<property>
<name>io.native.lib.available</name>
<value>true</value>
<description>开启本地库支持</description>
</property>
<!--主要的-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
<description>默认文件服务的协议和NS逻辑名称,和hdfs-site里的对应此配置替代了1.0里的fs.default.name</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/tmp</value>
</property>
<!--主要的-->
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.SnappyCodec</value>
<description>相应编码的操作类</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
<description>SequenceFiles在读写中可以使用的缓存大小</description>
</property>
<!--主要的-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
<description>HA使用的zookeeper地址</description>
</property>
<property>
<name>ipc.client.connection.maxidletime</name>
<value>60000</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.type</name>
<value>BLOCK</value>
</property>
<property>
<name>io.seqfile.compressioin.type</name>
<value>BLOCK</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>hadoop</value>
<description>hdfs dfsadmin –refreshSuperUserGroupsConfiguration,yarn rmadmin –refreshSuperUserGroupsConfiguration使用这两个命令不用重启就能刷新</description>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>localhost</value>
</property>
</configuration>
hadoop-env.sh j建议1.8x版本
export JAVA_HOME=/usr/java/jdk
export HADOOP_HOME=/opt/apps/hadoop
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_OS_TYPE=${HADOOP_OS_TYPE:-$(uname -s)}
export HADOOP_PID_DIR=$HADOOP_HOME/pids
workers
hadoop10x hadoop10x hadoop10x
sbin/start-dfs.sh、stop-dfs.sh
HDFS_DATANODE_USER=hadoop
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=hadoop
HDFS_SECONDARYNAMENODE_USER=hadoop
start-yarn.sh stop-yarn.sh
YARN_RESOURCEMANAGER_USER=hadoop
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=hadoop
系统环境变量
#hdfs
HADOOP_HOME=/opt/apps/hadoop
HADOOP_COMMON_HOME=${HADOOP_HOME}
HADOOP_HDFS_HOME=${HADOOP_HOME}
HADOOP_MAPRED_HOME=${HADOOP_HOME}
HADOOP_YARN_HOME=${HADOOP_HOME}
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:/usr/lib64
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
基于zookeeper启动
1.启动zookeeper
在 hadoop102 上使用之前写的多机操作脚本启动三台zookeeper节点
cd ~
./zk/ssh_all.sh /opt/apps/zookeeper/bin/zkServer.sh start
2.启动 journalnode (同步两台namenode信息)
#在hadoop102 上启动journalnode
hadoop-daemon.sh start journalnode
#在hadoop103 上启动journalnode
hadoop-daemon.sh start journalnode
3.初始化HA的zookeeper信息(第一次启动操作,以后不需要操作)
#启动zkclient,并连接zookeeper集群
/usr/local/zookeeper/bin/zkCli.sh -server hd1:2181,hd2:2181,hd3:2181
#在hadoop102克隆会话,用hadoop用户执行下面命令,初始化HA的zookeeper信息
#我是用hadoop用户来安装集群的,这里各位按自己的用户来
hdfs zkfc -formatZK
#通过zookeeper客户端查看结点
WatchedEvent state:SyncConnected type:None path:null
[zk: hd1:2181,hd2:2181,hd3:2181(CONNECTED) 0] ls /
[hadoop-ha, zookeeper]
[zk: hd1:2181,hd2:2181,hd3:2181(CONNECTED) 1]
4.对hadoop102上的namenode进行格式化(第一次启动前执行,以后不用每次启动都执行)
hadoop namenode -format # 格式化
hdfs --daemon start namenode # 启动
cat /usr/local/hadoop/logs/hadoop-hadoop-namenode-hadoop102.log # 查看日志
5、同步并启动hadoop103上的namenode
hadoop namenode -bootstrapStandby # 同步
hadoop-daemon.sh start namenode # 启动
cat /usr/local/hadoop/logs/hadoop-hadoop-namenode-hadoop103.log # 日志
6、启动zkfc
# 在 hd1和 hd2分别启动ZKFC,这时两个namenode,一个变成active,一个变成standby
hadoop-daemon.sh start zkfc
# 查看HA状态
[hadoop@hd1 ~]$ hdfs haadmin -getServiceState hadoop102
standby
[hadoop@hd1 ~]$ hdfs haadmin -getServiceState hadoop103
active
7.启动datanode
# 在 标记为active的namenode节点上执行
# 启动hd3,hd4,hd5上的datanode服务,注意这里是hadoop-daemons.sh而不是hadoop-daemon.sh
hadoop-daemons.sh start datanode
# 第二种是 3.x 推荐写法
hdfs --workers --daemon start datanode
测试已经启动/关闭命令
在自己的电脑 C:\Windows\System32\drivers\etc\hosts 添加映射
启动
启动 zookeeper
sh op/ssh_all.sh /opt/apps/zookeeper/bin/zkServer.sh start
启动hdfs
start-all.sh
启动正常截图




浙公网安备 33010602011771号