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 添加映射

http://hadoop10x:50070

启动

启动 zookeeper
sh op/ssh_all.sh /opt/apps/zookeeper/bin/zkServer.sh start
启动hdfs
start-all.sh

启动正常截图

image
image
image

posted @ 2021-07-28 21:54  苟天  阅读(450)  评论(0)    收藏  举报