https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/SingleCluster.html
建立伪分布模式
运行Hadoop步骤:
- ssh localhost 如果需要密码就运行
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
- 进入当前hadoop文件夹
cd /usr/local/Cellar/hadoop/3.1.2
- 格式化一个新的分布式文件系统:
./bin/hdfs namenode -format
- 启动启动Hadoop守护进程:
./sbin/start-dfs.sh
- Overview 界面:http://localhost:9870
下面来看下给定例子的grep功能。但是这里不能用local的文件input来计算了,得把文件上传到分布式文件系统。
- 创建执行MapReduce操作所需的HDFS目录
libexec $ bin/hdfs dfs -mkdir /user
libexec $ bin/hdfs dfs -mkdir /user/<username>
- 将输入文件拷贝到分布式文件系统
libexec $ bin/hdfs dfs -mkdir input
libexec $ bin/hdfs dfs -put etc/hadoop/*.xml input
8.运行grep
libexec $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar grep input output 'dfs[a-z.]+'
- 将输出文件从分布式文件系统拷贝到本地文件系统查看:
libexec $ bin/hdfs dfs -get output output
libexec $ cat output/
或者直接在分布式文件系统看:
libexec Huizhi$ bin/hadoop fs -cat output/*
- 完成全部操作后,停止守护进程:
$ bin/stop-all.sh
刚刚用到的Shell命令
在hadoop中,统一用bin/hadoop fs <args>
这种形式调用。
1)cat : 将路径指定文件的内容输出
格式: bin/hadoop fs -cat file
例子:bin/hadoop fs -cat output/*
解释:将output/*的内容输出,结果会显示在终端。
2)chmod:改变文件的权限 参考
使用方法:hadoop fs -chmod mode file
例子:$ chmod 0600 ~/.ssh/authorized_keys
解释:0600是指指定root用户可以rw, group 和others无权限。
3)get:复制文件到本地文件系统
格式:hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
例子: libexec $ bin/hdfs dfs -get output output
解释:将分布式文件系统的output复制到本地
4)put:从本地文件系统中复制单个或多个源路径到目标文件系统。
格式:hadoop fs -put <localsrc> ... <dst>
例子:libexec $ bin/hdfs dfs -put etc/hadoop/*.xml input
解释:将本地的hadoop下的xml格式的文件复制到hdfs的input内。
HDFS的结构
- 主节点:只有一个,namenode,负责管理,接收用户操作请求,可以实现对文件系统的操作,维护文件系统的目录结构(用来对文件进行分类管理)。管理文件与block之间关系,block与datanode之间关系。(文件被划分为Block,Block又被划分为block。)
- 从节点 :有很多个,datanode,负责存储文件,例如,保存副本,防止数据丢失。