已安装 jdk8. 并配置好环境变量 JAVA_HOME
集群中从 Master 到 各子节点机器都要配置 ssh 免登录。(最好创建专用的登录用户)
集群各机器的hostname 都一致,并且同步到各机器 /etc/hosts 中
配置好 hadoop 进程的最大文件描述符数限制
# /etc/security/limit.conf
# 用户可以打开的文件描述符上限
hadoop - nofile 32768
# 文件可以被引用的进程数上限,太小会引起jvm的OutOfMemoryError异常
hadoop - nproc 32000
选一台机器当作 Master 进行配置。 下载稳定版的 hadoop. 下载
这里选用稳定版 2.8.5 的 binary 包版本。这是为了和后续的 HBase 配合兼容,并且可以直接在linux上直接使用(动态库都加载正常的情况下)。
如果在mac os ,需要启动 native 静态库,也可以使用源码进行编译,可以参考下文源码编译。 注意,官网提供的bin包中的native 是 32位linux 版本,如果是64位仍需要手动编译。
解压到 /opt/hadoop-manager
中,并建立软链接 /opt/hadoop
指向该路径. 这里是为了方便版本切换。
配置好环境变量。(注意该环境变量需要在ssh 登录指定用户后生效)
# file: ~/.hadooprc
export HADOOP_HOME=/opt/hadoop
export HADOOP_DATA_DIR=/opt/hdfs
export HADOOP_INCLUDE_DIR=$HADOOP_HOME/include
export HADOOP_LOG_DIR=/opt/logs/hadoop
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_HOME/lib/native"
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
检查静态库 $HADOOP_HOME/lib/native
下的so 能够正常找到路径,如果找不到则需要配置好相应的so 路径到 /etc/ld.so.conf
下。如果前面的 jdk是手动安装的话,配置好 jre 的so路径。路径如下为 $JAVA_HOME/jre/lib/amd64
和 $JAVA_HOME/jre/lib/amd64/server
配置 DataNode 的节点 ip
# file: $HADOOP_HOME/etc/hadoop/slaves
hadoop@<你的节点ip>
配置以下文件。(没有则可以按 template 自行创建).
<aside> 💡 这里是以伪代码的形式给出. 实际配置的时候还需要 xml 的格式进行配置
</aside>
### *~/etc/hadoop/core-site.xml*
fs.defaultFS=hdfs://Master:9820 # 主节点的hdfs地址
hadoop.tmp.dir=<file:/> # hadoop的缓存内容地址, 防止因为系统清理而刷新掉
ha.zookeeper.quorum=master:2181,slave:2181 # 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点
### *~/etc/hadoop/hdfs-site.xml*
dfs.replication=3 # 数据副本备份片数
dfs.namenode.name.dir=<file:/opt/hdfs/name> # name node 在本地机器上的存储路径
dfs.datanode.data.dir=<file:/opt/hdfs/data> # data node 在本地机器上的存储路径
dfs.webhdfs.enabled=true # 支持 web hdfs 的端口
### *~/etc/hadoop/mapred-site.xml*
mapreduce.framework.name=yarn # 指定资源调度框架的名字
mapreduce.jobhistory.done-dir=<hdfs://> # 指定hdfs 上存放已经执行完成的作业日志
mapreduce.jobhistory.intermediate-done-dir=<hdfs://> # 指定hdfs 上存放正在执行的作业日志
mapreduce.map.memory.mb=2048 # container map 最大内存
mapreduce.reduce.memory.mb=1024 # container reduce 最大内存
mapreduce.map.java.opts=-Xmx1024m # container map 任务 中 java进程 所能使用的最大内存大小
mapreduce.reduce.java.opts=-Xmx512m # container reduce 中 java进程 所能使用的最大内存大小
### *~/etc/hadoop/yarn-site.xml*
yarn.resourcemanager.hostname= # 指定非高可用情况下的 rm 的hostname
yarn.nodemanager.aux-services=mapreduce_shuffle # NodeManager上运行的附属服务,默认是mapreduce_shuffle
yarn.nodemanager.resource.memory-mb= # 每个yarn nodemanager 节点上最大可用的物理内存
yarn.scheduler.maximum-allocation-mb= # yarn 给每个 nodemanager 节点上分配 单个container 所能占到的最大物理内存
yarn.nodemanager.vmem-pmem-ratio=5 # yarn nodemanager 管理单个 container的最大虚拟内存 比率 ( container 的最大虚拟内存 = container 物理内存 * 该比率. 默认值 2.1 )
yarn.nodemanager.vmem-check-enabled=true # 检查 container 占据的 虚拟内存, 超过预设值则kill
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler # 指定调度程序, 使用公平的调度程序
yarn.log-aggregation-enable=true # 启动日志
yarn.log.server.url=http://master:19888/jobhistory/logs # jobhistory 访问路径
yarn.resourcemanager.ha.enabled=true # 是否启用 yarn 高可用
yarn.nodemanager.resource.cpu-vcores=2 # 每个 nodemanager 节点可分配的cpu 核数
配置完成之后。注意存放数据的 HDFS 路径要先创建好。 执行以下命令,重置 namenode 节点. hdfs namenode -format
执行 $HADOOP_HOME/sbin/start-dfs.sh
启动 hdfs。 如果遇到错误可以使用以下命令开启日志。
export HADOOP_ROOT_LOGGER=DEBUG,console
使用命令 jps 查看节点是否启动成功
执行 $HADOOP_HOEM/sbin/start-yarn.sh
启动yarn 。可以通过 web 来查看,也可以通过在 namenode 节点上执行 yarn node -list
来查看 active 的 NodeManager