- 0.前置条件
- 1. 安装JDK
- 2. 安装hadoop
- 2.1 安装
- 2.2 hadoop修改配置文件
- 2.3启动hadoop服务
- 2.4 可能报错
- 3. hadoop集群的增删改查
- 3.1 增加节点
- 3.2 删除节点
在/etc/hosts里面配置节点和别名(master,node1.node2)
三个节点配置免密登陆的ssh
JDK就是java和java的开发环境的合称
官网:
https://www.java.com/zh-CN/download/help/index_installing.html
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz mkdir /usr/java tar zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -C /usr/java sudo vim /etc/profile export JAVA_HOME=/usr/java/java-se-8u41-ri export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH source /etc/profile java -version jps
安装好java后,在/etc/profile或者 ~/.bashrc下添加环境变量,后source /etc/profile 或者 source ~/.bashrc 即可
/etc/profile和~/.bashrc的区别是 /etc/profile 是全局的,也就是你在任何一个用户下执行都可以, ~/.bashrc 这个是某个用户所单独拥有的,像java这样的每个用户都需要的 写在 /etc/profile下即可
jre是运行环境,只是运行java的,不包含工具包
开发包是jdk,包含工具包和运行环境
安装完成之后,按照同样的方式在node节点上都安装上jdk
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz tar zxvf hadoop-3.3.0.tar.gz -C /usr/local/ cd /usr/local/ mv hadoop-3.3.0 hadoop vim ~/.bashrc export HADOOP_HOME=/usr/local/hadoop export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native source ~/.bashrc hadoop version
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。首先将jdk1.7的路径添(export JAVA_HOME=/usr/lib/jvm/java )加到hadoop-env.sh文件
2.2 hadoop修改配置文件添加环境变量
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh export JAVA_HOME=/usr/java/java-se-8u41-ri source ~/.bashrc
修改core-site.xml文件:
fs.defaultFS hdfs://master:8020 hadoop.tmp.dir /usr/local/hadoop/hadoopDatas/tempDatas io.file.buffer.size 1024 fs.trash.interval 10080 检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。 该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。 如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。 fs.trash.checkpoint.interval 0 垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。 如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时, 它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。
接下来修改配置文件 hdfs-site.xml
dfs.hosts /usr/local/hadoop/etc/hadoop/accept_host dfs.hosts.exclude /usr/local/hadoop/etc/hadoop/deny_host dfs.namenode.secondary.http-address master:50090 dfs.namenode.http-address master:50070 dfs.namenode.name.dir file:///usr/local/hadoop/hadoopDatas/namenodeDatas dfs.datanode.data.dir file:///usr/local/hadoop/hadoopDatas/datanodeDatas dfs.namenode.edits.dir file:///usr/local/hadoop/hadoopDatas/dfs/nn/edits dfs.namenode.checkpoint.dir file:///usr/local/hadoop/hadoopDatas/dfs/snn/name dfs.namenode.checkpoint.edits.dir file:///usr/local/hadoop/hadoopDatas/dfs/nn/snn/edits dfs.replication 2 dfs.permissions false dfs.blocksize 134217728
接下来修改配置文件 yarn-site.xml
yarn.resourcemanager.hostname master yarn.nodemanager.aux-services mapreduce_shuffle yarn.log-aggregation-enable true yarn.log.server.url http://master:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 2592000 yarn.nodemanager.log.retain-seconds 604800 yarn.nodemanager.log-aggregation.compression-type gz yarn.nodemanager.local-dirs /usr/local/hadoop/hadoopDatas/yarn/local yarn.resourcemanager.max-completed-applications 1000
接下来修改配置文件 mapred-site.xml
mapreduce.framework.name yarn mapreduce.job.ubertask.enable true mapreduce.jobhistory.address master:10020 mapreduce.jobhistory.webapp.address master:19888
创建上面配置文件中声明的data路径
cd /usr/local/hadoop
mkdir -p hadoopDatas/{tempDatas,namenodeDatas,datanodeDatas,dfs/nn/edits,dfs/snn/name,dfs/nn/snn/edits}
声明node节点
hadoop3.0 slaves改为works
vim /usr/local/hadoop/etc/hadoop/workers master node1
复制hadoop目录到node节点服务器(slaves服务器)
这里注意,需要添加java的环境和hadoop的路径到node节点的/etc/profile文件中,并通过source生效,相当于全拷贝一份到节点服务器
scp -r /usr/local/hadoop node2:/usr/local/
如果你是root用户配置和运行的hadoop,则需要配置下面的文件
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(可参考官方教程),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
2.3启动hadoop服务配置完成后,执行 NameNode 的格式化
./bin/hdfs namenode -format
启动namenode和datanode进程,并查看启动结果
./sbin/start-dfs.sh jps
启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode” 和 “SecondaryNameNode”
2.4 可能报错WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform
解决思路:https://blog.csdn.net/qq_41541801/article/details/82413776
hadoop ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_US
解决思路:https://blog.csdn.net/lglglgl/article/details/80553828
Permission denied
解决思路:
cd ~/.ssh mkdir backup && mv id_rsa* backup ssh-keygen -t rsa #注意不要输入密码,即免密登陆 cat id_rsa.pub >> authorized_keys
登陆被管理的服务器,进入需要远程登陆的用户目录,把公钥放到用户目录的 .ssh 这个目录下(如果目录不存在,需要创建~/.ssh目录,并把目录权限设置为700),把公钥改名为authorized_keys,并且把它的用户权限设成600
put: File /home/wget-log._COPYING_ could only be written to 0 of the 1 minReplication nodes. There are 0 datanode(s) running and 0 node(s) are excluded in this operation.
解决思路
解决办法是:找到hadoop安装目录下 hadoop-2.4.1/data/dfs/data里面的current文件夹删除,然后从新执行一下 hadoop namenode -format,再使用start-dfs.sh和start-yarn.sh 重启一下hadoop
用jps命令看一下就可以看见datanode已经启动了
比如增加节点node2,前置的条件都是一样的:
1.配置JDK和hadoop,并且加到环境中
2.所有节点设置/etc/hosts,并且设置成ssh免密登陆
3.在master主机添加新节点到workers文件中
上面的前置条件完成后,开始执行下面的步骤
hadoop系统正处于运行之中,要将新添加的节点动态加入到系统中,只需要在此节点上启动datanode和nodemanager
cd /usr/local/hadoop sbin/hadoop-daemon.sh start datanode
重启所有的节点
hdfs --daemon stop datanode hdfs --daemon start datanode jps
查看节点有没有加进来
hdfs dfsadmin -report
因为HDFS里面都是有数据的,增加节点会导致数据分布不均衡,所有需要进行自动均衡操作。默认的数据传输带宽比较低,可以设置为64M,目录如下:
hdfs dfsadmin -setBalancerBandwidth 67108864
默认balancer的threshold为10%,即各个节点与集群总的存储使用率相差不超过10%,我们在均衡时可以指定该值为5%:
start-balancer.sh -threshold 5
在新增的节点启动nodemanager进程
Hadoop 从2.X引入了YARN框架,所以对于每个计算节点都可以通过NodeManager进行管理,同理启动NodeManager进程后,即可将其加入集群。
yarn-daemon.sh start nodemanager yarn --daemon stop nodemanager yarn --daemon start nodemanager jps yarn node -list
新增的节点 slaves 启动了 DataNode 和 NodeManager,实现了动态向集群添加了节点,至此Hadoop 动态添加节点操作完成。
3.2 删除节点在删除的节点上关闭进程
yarn-daemon.sh stop nodemanager hadoop-daemon.sh stop datanode
在主节点刷新
hdfs dfsadmin -refreshNodes
查看节点状态(可以看到节点的状态变成了Decommissioned,过一段时间后变成Died)
hdfs dfsadmin -report



