centos7 Hadoop完全分布式安装及操作(shell、api)·详

(一). 集群规划
hadoop01hadoop02hadoop03
hdfsnamenode
datanodedatanodedatanode
secondarynamenode
mapreduce
yarnresourcemanager
nodemanagernodemanagernodemanager
(二). 开始安装
1.上传 hadoop-2.7.6.tar.gz, 解压至 /opt/
tar -zxvf hadoop-2.7.6.tar.gz -C /opt/
2.配置 Hadoop 环境变量
sudo vi /etc/profile 
export HADOOP_HOME=/opt/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.修改 Hadoop 配置文件, /opt/hadoop-2.7.6/etc/hadoop/
core-site.xml
<configuration>
	<property>
		<!-- hdfs的主节点 namenode 的访问入口 hdfs://hadoop01:9000 -->
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop01:9000</value>
	</property>
	
	<property>
		<!-- hdfs存储数据的目录 配置家目录下某一个目录 -->
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/data/hadoopdata</value>
	</property>
</configuration>
hdfs-site.xml
<configuration>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/data/hadoopdata/namenode</value>
    <description>namenode相关数据的存储目录</description>
  </property>

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/data/hadoopdata/datanode</value>
    <description>datanode相关数据的存储目录</description>
  </property>

  <property>
    <name>dfs.replication</name>
    <value>2</value>
    <description>hdfs的数据块的副本存储个数</description>
  </property>

  <property>
    <name>dfs.secondary.http.address</name>
    <value>hadoop02:50090</value>
    <description>secondarynamenode运行节点的信(与namenode不同节点)</description>
  </property>
</configuration>
mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
sudo vi mapred-site.xml 
<configuration>
  <property>
    <!--配置mapreduce的计算任务的资源调度框架-->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
yarn-site.xml
<configuration>
  <property>
    <!--配置yarn的主节点-->
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop03</value>
  </property>

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>yarn 集群为 MapReduce 程序提供的 shuffle服务</description>
  </property>
</configuration>
Hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}   
因hadoop配置文件启动顺序原因导致上述命令会导致Java加载错误,故修改为实际Java所在:
export JAVA_HOME=/opt/jdk1.8.0_73
slavers
dd,删掉其中的loclhost,然后添加:
hadoop01
hadoop02
hadoop03
4.配置完成, 将 /opt/hadoop-2.7.6、/etc/profile 发送至其它节点, 然后格式化文件系统
在 namenode 所在节点执行格式化 hdfs 文件系统命令:
hadoop namenode -format
5.格式化成功后, 即可启动并执行对应操作.

Hadoop 命令及操作(shell、api)

1.启动 hdfs 文件系统 (任意节点均可)
start-dfs.sh
stop-dfs.sh
web页面: http://hadoop01:50070
2.启动/停止 yarn , (均必须在 yarn 主节点中执行)
start-yarn.sh
stop-yarn.sh
web页面: http://hadoop03:8088
3.全部启动与全部停止, 等价于 hdfs + yarn, 不建议使用(与spark中命令冲突)
[root@hadoop01 hadoop]# cd /opt/hadoop-2.7.6/sbin/
start-all.sh 
stop-all.sh
4.若某个进程挂掉了, 则可以单独启动该进程(在对应缺失进程的节点中执行)
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager

若启动失败, 可去 $HADOOP_HOME/logs 中根据名字查找对应进程日志

日志文件: 模块 + 用户名 + 进程名 + 节点.log

tail -100 文件名

5. Hadoop shell 操作
1.级连查看/目录下文件
	hadoop fs -ls -R /
2.级连创建目录,文件
	hadoop fs -mkdir -p /aa/bb/cc
	hadoop fs -touch filename  (创建一个空文件)
3.上传文件
	hadoop fs -copyFromLocal 本地文件路径 hdfs路径	 (拷贝)
	hadoop fs -moveFromLocal 本地文件路径 hdfs路径	 (移动)
	hadoop fs -put 本地文件路径 hdfs路径					   (拷贝,同 -copyFromLocal,推荐使用) 
4.下载文件
	hadoop fs -copyToLocal hdfs文件路径 本地路径	 (拷贝)
	hadoop fs -moveToLocal hdfs文件路径	本地路径   (移动)
	hadoop fs -get hdfs文件路径 本地路径				   (拷贝,同 -copyToLocal,推荐使用)
5.查看文件内容
	hadoop fs -cat hdfs文件路径  (必须从根目录开始)
	hadoop fs -tail hdfs文件路径 (查看末尾1kb的文件)
6.删除目录或文件
	hadoop fs -rm -r -f 目录或文件 ( -r 级连删除, -f 强制删除)
7.修改hdfs文件或目录的读写权限
	linux: chmod -R 777 文件或目录
		-R 级联修改目录下的所有子文件的权限,因此修改目录时通常加上该参数
	hadoop fs -chmod -R 777 /aa
8.修改文件或目录所属用户  和 组
	linux: chown -R 用户:组 文件或目录
	hadoop fs -chown -R 用户:组 文件或目录
	hadoop fs -chown -R hadoop:hadoop /aa
9.修改hdfs文件的副本个数,某个特殊重要的文件需要多重备份,(只能修改hdfs上已经存在的文件或目录)
  -setrep [-R] [-w]    set replication
  -R 				级联修改目录下的所有文件
  -w wait   等待新副本的复制完成|删除完成   阻塞
  hadoop fs -setrep -R 3 /aa
10.查看磁盘占有情况
		hadoop fs -du -h hdfs目录
			统计hdfs目录下的每一个文件夹|文件的大小
		hadoop fs -df -h hdfs目录
			查看指定路径的磁盘占有率
11.其他命令
		1)-appendToFile 追加  了解
		hadoop fs -appendToFile 本地文件 hdfs文件
		将本地文件  追加到指定的hdfs文件的末尾
		hadoop fs -appendToFile hdfs-site.xml /slaves  不建议使用的
		
		2)-cp|-mv   
		hadoop fs -cp|-mv hdfs路径 hdfs路径 
		将hdfs的(目录)文件 拷贝|移动 hdfs另一个文件路径中
		hadoop fs -mv /slaves /sl02  重命名  掌握
		
		3) -getmerge  合并下载  归并下载
			hadoop fs -getmerge hdfs路径1 hdfs路径2 。。。。 本地路径
			将hdfs的多个路径  合并下载到本地
			hadoop fs -getmerge /sl01 /sl02 /home/hadoop/testmetge
			这个命令 默认将最后一个目录识别为本地路径
		4)-count  文件统计
		5)-text  将文件以文本显示
6.Hadoop 知识点补充
hdfs的所有路径权限定名:namenode的访问路径+需要访问的路径
	当时将name访问路径配置在 core-site.xml 文件中
			<property>
			 <name>fs.defaultFS</name>
			 <value>hdfs://hadoop01:9000</value>
			</property>
hdfs://hadoop01:9000/
简写: /
全写: hadoop fs -ls hdfs://hadoop01:9000/
	hdfs      协议
	hadoop01  namenode 主节点 
	9000      端口号
hdfs有两个端口:
9000: datanode和namenode通信访问的端口,内部访问,基于rpc协议;
50070: 客户端访问web界面的http协议端口.
hadoop fs -命令  老
hdfs dfs - 命令  新
7.idea Hadoop hdfs API操作
1.maven 方式: 创建idea maven项目, 导入对应版本client、common、hdfs等包

优点:工程规整, 可以解决jar包冲突
缺点:代码移动后, 需要重新构建依赖的

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>hadoopHdfs</groupId>
    <artifactId>hadoopHdfs</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <!-- 客户端开发,故使用 client 包 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.6</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.6</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.6</version>
        </dependency>

    </dependencies>

</project>

或使用

2.本地工程下构建 library 方式:

在工程下创建 lib 文件夹, 将所有的依赖放在 lib 下, 然后 build path

优点:工程移动比较方便

缺点:无法解决jar包冲突问题, 工程臃肿

对应 Mac 中编译过的路径中的 jar 包, 在 linux 中方便演示目录结构: 
[root@hadoop01 hadoop]# cd /opt/hadoop-2.7.6/share/hadoop/
[root@hadoop01 hadoop]# ll
total 8
drwxr-xr-x 6 777 101  158 Apr 18  2018 common        共有公共依赖
drwxr-xr-x 7 777 101  174 Apr 18  2018 hdfs 
drwxr-xr-x 3 777 101   20 Apr 18  2018 httpfs        通信模块
drwxr-xr-x 3 777 101   20 Apr 18  2018 kms           算法
drwxr-xr-x 5 777 101 4096 Apr 18  2018 mapreduce
drwxr-xr-x 5 777 101   43 Apr 18  2018 tools         工具包
drwxr-xr-x 5 777 101 4096 Apr 18  2018 yarn
[root@hadoop01 hadoop]#

在本机 Mac 中安装后 Hadoop 后,打开文件对应路径:

在这里插入图片描述

建议使用 maven 方式, 以下也是按照 maven 方式继续
2.将 core-site.xml、hdfs-site.xml 放在 hadoopHdfs/src/main/resources/ 目录下
将 log4j.properties 放至对应目录下
3.创建HdfsTest.java,编写测试访问
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HdfsTest {
    public static void main(String[] args) {
        try {
            String filename = "hdfs://hadoop01:9000/aa/bb/testCon.txt";
            Configuration conf = new Configuration();
            FileSystem fs = FileSystem.get(conf);
            if(fs.exists(new Path(filename))){
                System.out.println("exist");
            }else{
                System.out.println("no exist");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
4.在hdfs上创建对应目录及文件, 并运行程序查看命令台结果
[root@hadoop01 hadoop]# hadoop fs -touchz /aa/bb/testCon.txt
[root@hadoop01 hadoop]# hdfs dfs -ls -R /
drwxr-xr-x   - root supergroup          0 2020-11-02 11:04 /aa
drwxr-xr-x   - root supergroup          0 2020-11-02 11:08 /aa/bb
-rw-r--r--   2 root supergroup          0 2020-11-02 11:08 /aa/bb/testCon.txt
-rw-r--r--   2 root supergroup    9541892 2020-11-01 21:15 /hadoop6

在这里插入图片描述

5.API方式上传下载文件, Permission denied 权限不足
Permission denied: user=dooo, access=WRITE, inode="/aa":root:supergroup:drwxr-xr-x

原因: 上传文件时用户是当前Mac主机用户dooo, 而hadoop上传应使用hadoop集群用户root

解决方式:

  1. 指定上传用户后再运行
Run -- Edit Configurations -- VM options:-DHADOOP_USER_NAME=root

在这里插入图片描述

  1. 直接在代码中指定
代码最前方指定:
System.setProperty("HADOOP_USER_NAME","root");
  1. 重载 FileSystem.get(uri,conf,user) 推荐
Configuration conf = new Configuration();
/*
* FileSystem.get(uri,conf,user);
* namenode访问的主入口、conf、指定文件系统用户
*/
FileSystem fs = FileSystem.get(new URI("hdfs://hadoop01:9000"),conf,"root");
	...
  1. 在 Mac 中创建 HADOOP_USER_NAME = root 环境变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值