Hadoop学习笔记二

内容概要: Hadoop Distributed File System, HDFS CommandLineInterface
配置文档
本文代码

1. HDFS

1.1 配置伪分布模式
1.配置core-site.xml

1
2
3
4
5
6
7
8
9
<configuration>
<property>
<!--使用hdfs uri设置Hadoop默认文件系统-->
<!--HDFS守护进程通过该属性来确定namenode的主机和端口, 客户端通过该属性知道namenode在哪里运行-->
<name>fs.default.name</name>
<value>hdfs://localhost/</value>
</property>

</configuration>

2.配置hdfs-site.xml

1
2
3
4
5
6
7
<configuration>
<property>
<!--设置以下属性为1, 这样就不会使用默认设置3-->
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

3.配置mapred-site.xml

1
2
3
4
5
6
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>

1.2 配置免密码ssh
确认能否不输入口令就登录localhost

1
$ ssh localhost

如果不行, 首先确认已经安装了ssh(包括ssh-client, ssh-server,…). 这里可能会遇到版本不兼容问题, 因为ubuntu系统自带了默认的openssh-client, 与apt-get上面对应的openssh-server版本不一致. 参考文档

1.3 格式化HDFS文件系统
在使用Hadoop之前必须格式化生成一个全新的HDFS, 该过程创建一个空的文件系统, 仅包含存储目录和namenode持久化数据结构的初始版本, namenode管理文件系统的元数据, datanode可以动态加入, 因此这一格式化过程不针对datanode。

1
2
# 格式化hdfs文件系统
$ hadoop namenode -formate

1.4 启动HDFS和MapReduce守护进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用以下脚本
$ /opt/hadoop/hadoop-3.0.0-alpha4/sbin/start-dfs.sh
$ /opt/hadoop/hadoop-3.0.0-alpha4/sbin/start-mapred.sh

# 或者使用以下脚本
$ /opt/hadoop/hadoop-3.0.0-alpha4/sbin/start-all.sh

# 使用jps验证是否启动成功
$ jps
12690 DataNode
12917 SecondaryNameNode
13481 NodeManager
12521 NameNode
18319 Jps
13151 ResourceManager


2. HDFS CLI

经过上述安和配置以后, 文件系统就基本可用了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 首先获取hadoop fs命令帮助文档
$ hadoop fs -help

# 从本地文件复制一个文件到HDFS
$ hadoop fs -copyFromLocal workers.sh hdfs://localhost/

# 查看根目录下的文件(根目录为hdfs://localhost/,或者/)
$ hadoop fs -ls -h /
Found 3 items
-rw-r--r-- 1 jay supergroup 1.5 K 2017-10-27 10:31 /profile
drwxr-xr-x - jay supergroup 0 2017-10-27 09:26 /user
-rw-r--r-- 1 jay supergroup 1.9 K 2017-10-27 09:23 /workers.sh

# 或者
hadoop fs -ls -h hdfs://localhost/
Found 3 items
-rw-r--r-- 1 jay supergroup 1.5 K 2017-10-27 10:31 hdfs://localhost/profile
drwxr-xr-x - jay supergroup 0 2017-10-27 09:26 hdfs://localhost/user
-rw-r--r-- 1 jay supergroup 1.9 K 2017-10-27 09:23 hdfs://localhost/workers.sh

创建用户目录, 然后就可以使用相对路径了:

1
2
3
4
5
6
7
8
9
# 在HDFS初始目录下面创建一个用户目录, 然后就可以使用相对
$ hadoop fs -mkdir /user
$ hadoop fs -mkdir /user/jay

# . 所代表的当前目录就是hdfs://localhost/user/jay/
$ hadoop fs -ls -h .
Found 2 items
drwxr-xr-x - jay supergroup 0 2017-10-27 09:36 books
-rw-r--r-- 1 jay supergroup 1.9 K 2017-10-27 09:27 hadoop-daemon.sh

通过distcp并行复制

1
2
3
4
# distcp的典型应用场景是在两个HDFS集群之间传输数据
$ hadoop distcp hdfs://localhost/user/jay/hello.go hdfs://localhost/
$ hadoop distcp -update hdfs://localhost/user/jay/hello.go hdfs://localhost/
$ hadoop distcp -override hdfs://localhost/user/jay/hello.go hdfs://localhost/