第二节 Hadoop下WordCount以及单机安装
connygpt 2024-10-04 15:46 3 浏览
【Hadoop大数据基础】
第二节 Hadoop安装与使用
2.1 Hadoop简介
2.2 MR实现第一节作业
2.3 HDFS分布式存储系统
2.4 单机安装
2.5 分布式集群搭建
2.6 课后作业
2.1 Hadoop简介
在文章的时候已经讲解了Hadoop的简介以及生态圈,有什么不懂的可以"出门右转"
http://dwz.cn/4rdSdU
2.2 MR实现第一节作业
首先运行计算就要启动mapreduce,我们刚刚才启动了start-dfs.sh (HDFS文件系统),所以不能计算那么我们把mapreduce的程序也启动起来。
启动mapreduce命令
[root@localhost hadoop]# start-yarn.sh starting yarn daemons
starting resourcemanager, logging to /opt/hadoop/hadoop-2.6.0-cdh5.8.2/logs/yarn-root-resourcemanager-localhost.localdomain.out
localhost: starting nodemanager, logging to /opt/hadoop/hadoop-2.6.0-cdh5.8.2/logs/yarn-root-nodemanager-localhost.localdomain.out
启动完成以后我们调用"jps"命令看是否真的启动成功了28113 NodeManager28011 ResourceManager28442 Jps27137 NameNode27401 SecondaryNameNode27246 DataNode
可以很明显的看到多出来两个程序。
创建测试文件
创建一个测试的数据:
vi /opt/test/test.txt
麒麟
小张
张张
果哥
泽安
跨越
天天顺利
泽安
祖渊
张张
2.2-01.jpg
将测试文件上传到HDFS
首先我们要在HDFS上再创建两个文件,一个 input(输入) / ouput(输出)的文件夹。
[root@localhost ~]# hdfs dfs -mkdir /input /ouput
16/10/26 04:30:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
将测试数据上传到"input"文件夹
[root@localhost ~]# hdfs dfs -put /opt/test/test.txt /input16/10/26 04:33:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
查看是上传成功
[root@localhost ~]# hdfs dfs -cat /input/test.txt16/10/26 04:34:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
麒麟
小张
张张
果哥
泽安
跨越
天天顺利
泽安
祖渊
张张
调用Hadoop自带的WordCount方法
[root@localhost ~]# hadoop jar /opt/hadoop/hadoop-2.6.0-cdh5.8.2/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.8.2.jar wordcount /input /ouput/test16/10/26 04:49:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable16/10/26 04:49:38 INFO client.RMProxy: Connecting to ResourceManager at localhost/127.0.0.1:803216/10/26 04:49:42 INFO input.FileInputFormat: Total input paths to process : 116/10/26 04:49:43 INFO mapreduce.JobSubmitter: number of splits:116/10/26 04:49:44 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1477471653063_000116/10/26 04:49:46 INFO impl.YarnClientImpl: Submitted application application_1477471653063_000116/10/26 04:49:47 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1477471653063_0001/16/10/26 04:49:47 INFO mapreduce.Job: Running job: job_1477471653063_000116/10/26 04:50:21 INFO mapreduce.Job: Job job_1477471653063_0001 running in uber mode : false16/10/26 04:50:21 INFO mapreduce.Job: map 0% reduce 0%16/10/26 04:50:44 INFO mapreduce.Job: map 100% reduce 0%16/10/26 04:51:04 INFO mapreduce.Job: map 100% reduce 100%16/10/26 04:51:06 INFO mapreduce.Job: Job job_1477471653063_0001 completed successfully16/10/26 04:51:06 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=116
FILE: Number of bytes written=232107
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=177
HDFS: Number of bytes written=78
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=18128
Total time spent by all reduces in occupied slots (ms)=17756
Total time spent by all map tasks (ms)=18128
Total time spent by all reduce tasks (ms)=17756
Total vcore-seconds taken by all map tasks=18128
Total vcore-seconds taken by all reduce tasks=17756
Total megabyte-seconds taken by all map tasks=18563072
Total megabyte-seconds taken by all reduce tasks=18182144
Map-Reduce Framework
Map input records=10
Map output records=10
Map output bytes=116
Map output materialized bytes=116
Input split bytes=101
Combine input records=10
Combine output records=8
Reduce input groups=8
Reduce shuffle bytes=116
Reduce input records=8
Reduce output records=8
Spilled Records=16
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=454
CPU time spent (ms)=3450
Physical memory (bytes) snapshot=306806784
Virtual memory (bytes) snapshot=3017633792
Total committed heap usage (bytes)=163450880
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=76
File Output Format Counters
Bytes Written=78运行完成我们看看计算出来的结果:
[root@localhost ~]# hdfs dfs -ls /ouput/test16/10/26 04:53:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r-- 1 root supergroup 0 2016-10-26 04:51 /ouput/test/_SUCCESS
-rw-r--r-- 1 root supergroup 78 2016-10-26 04:51 /ouput/test/part-r-00000[root@localhost ~]# hdfs dfs -cat /ouput/test/part-r-0000016/10/26 04:53:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
天天顺利 1小张 1张张 2果哥 1泽安 2祖渊 1跨越 1麒麟 1
2.3 HDFS分布式存储系统
HDFS优点
高容错性
数据自动保存多个副本
副本都时候会自动恢复
适合批量处理
移动计算而非数据
数据位置暴露给计算框架
适合大数据处理
GB/TB/甚至PB级数据
百万规模以上文件数量
10k+
可构建廉价的机器上
不管机器人有多么的垃圾,只要有空间内存就可以搭建Hadoop
HDFS缺点
低延迟数据访问
比如毫秒级
低延迟与高吞吐率
小文件存取
占用NameNode大量内存
寻道时间超过读取时间
并发写入/文件随机修改
一个文件只能有一个写者
只支持append
HDFS架构
2.3-01.jpg
如图所示,HDFS是按照Master和Slave的结构
NameNode:类似项目经理职位 下达需求,监控团队进度,工作分配。
管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
NameNode的主要功能:接受客户端的读写服务。
上传文件 读取文件都要联系NameNode
Namenode保存了metadate信息,而metadate保存着datanode的元数据 包含了block的位置信息(路径),以及datanode的详细信息。
Namenode的metadate信息启动后会加载到内存,metadate存储到磁盘的文件名;"fsimage",但是其中不包含Block的位置信息,而block的位置信息是在每一次Datanode启动的时候将block的位置信息发送给NameNode 内存中。
**edits**记录对metadate的操作日志。
SecondaryNameNode:类似经理助理的职位 分担领导(Namenode)的工作量;
SecondaryNameNode他不是主节点也不是从节点,它是用来辅助NameNode来完成editslog操作日志的。
合并edits的操作可以配置:
设置fs.checkpoint.period 默认3600秒
设置edits log大小fs.checkpoint.size规定edits文件的最大默认64MB
NN合并流程
DataNode: 程序员干活的,上头(NameNode)下达一个需求功能需要你(DataNode)实现。存储client发来的数据块block;执行数据块的读写操作。
dataNode(block)它是数据存储单元,就是数据真正存储的地方。每一个block都会被固定大小的数
据块,默认数据块的大小是64MB**可配置**。
问:我这个文件大小没有达到64MB怎么办呢?
答:如果该文件还不到64MB的时候,则单独成一个block
问:那如果大于64MB怎么办?
答:如果大了就在切分一个block出来,就像我们切肉/切菜一样,想把他们切的均衡(64MB),假如肉切的1厘米,到最后还剩下3厘米怎么办?那就继续再切分。
datanode设计思想
如图所示
假如我上传文件大小为"50G"-->切分为多个block。
每一个Block都会有一个3个副本(可配置)
每一个block的3个副本都存在不同的节点(机器)上,如图"block1"。
HDFS写流程
简单易懂
1.HDFS Client-->NameNode:我要上次新文件2.NameNode检查DataNode空间,检查出: xxx机器上的节点可以存储3.NameNode上传4.记录log日志
下面是专业术语
客户端调用create()来创建文件
DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。
元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
DistributedFileSystem返回DFSOutputStream,客户端用于写数据。
客户端开始写入数据,DFSOutputStream将数据分成块,写入data queue。Data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。
如果数据节点在写入的过程中失败:
关闭pipeline,将ack queue中的数据块放入data queue的开始。
当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。
失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。
元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。
当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
写原理
读文件
客户端(client)用FileSystem的open()函数打开文件
DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。
对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据。
客户端调用stream的read()函数开始读取数据。
DFSInputStream连接保存此文件第一个数据块的最近的数据节点。
Data从数据节点读到客户端(client)
当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。
失败的数据节点将被记录,以后不再连接。
读原理
安全模式
Name启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作,一旦在内存中成功建立文件系统元数据映射,则创建一个新的fsimage文件(SecondaryNameNode)和一个空的(edits)编辑日志。
此刻Namenode运行"安全模式",即Namenode的文件系统对于客户端来说是只读的。(显示目录,显示文件内容等。但是 增删改都会失败)。
2.4 单机安装
系统环境
名称 | 版本 | 下载 |
---|---|---|
linux | centos | 百度 |
jdk | 1.7 | 百度 |
hadoop | 2.6.0 | 百度 |
jdk安装
下载地址百度即可,我使用的JDK版本是 1.7 ;
2.4-01.jpg
1.在linux创建一个文件夹放jdk
mkdir /usr/jvm2.将jdk移到刚刚创建的JVM文件夹下,也可以解压到jvm文件夹下
我这里使用解压
tar -zxvf /opt/hadoop/tar/jdk-7u79-linux-x64.tar.gz -C /usr/jvm/3.解压完成以后配置JDK环境变量 /etc/profile
使用命令:
vi /etc/profile
2.4-02.jpg
将↓↓↓↓加在profile中
export JAVA_HOME=/usr/jvm/jdk1.7.0_79 export JAVA_BIN=/usr/jvm/jdk1.7.0_79/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#PATH
PATH=$PATH:$JAVA_HOME/bin
2.4-03.jpg
==在linux配置中有hadoop在这里先不要管==
4.到这里jdk配置已经完成了,我们需要刷新一下刚刚修改的profile。否则我们改改新配置的参数是无法生效的。
[root@zero230 tar]# source /etc/profile5.调用命令查看是否配置成功并且查看版本是否与我们配置的一致
2.4-04.jpg
[root@zero230 tar]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)到这里JDK已经安装完成!
SSH免验证
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
配置Hadoop
一.Hadoop-env.sh
Hadoop也是需要java的,所以我们需要配置(hadoop-env.sh)它调用的java。
vi hadoop-env.sh它默认的配置是:export JAVA_HOME=${JAVA_HOME}。这样的话必须定义变量才能启动JAVA,所以我们需要将(hadoop-env.sh)里面的JAVA_HOME变量指定的内容改成我们的JAVA安装的绝对路径,我JDK安装的路径在"/usr/bin/java"目录下。export JAVA_HOME=/usr/bin/java
二.core-site.xml
我们需要配置两个参数 defaultFS(HDFS默认名称)
//配置HDFS名称
hdfs:协议头,如:http https 等
localhost:主机名
9000:端口<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value></property>
三.hdfs-site.xml
replication(副本个数 默认为3个),因为我这里搭建的是单机所以只要一个。
replication:设置的副本个数<property>
<name>dfs.replication</name>
<value>1</value></property>
四.mapred-site.xml
==注意:mapred.site.xml开始并不存在,而是mapred-site.xml.template。我们需要使用cp命令一份命名为mapred.site.xml==
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value></property>
五.yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value></property><property> <name>yarn.resourcemanager.address</name> <value>localhost:8032</value></property>
格式化HDFS
1. $ bin/hdfs namenode -format
格式化NameNode,不需要每次启动都需要格式化,机器第一次启动的时候需要格式化一次16/10/26 03:30:03 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]16/10/26 03:30:03 INFO namenode.NameNode: createNameNode [-format]16/10/26 03:30:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Formatting using clusterid: CID-2eba6061-bea3-4e86-85cc-ebb1b51cf73016/10/26 03:30:05 INFO namenode.FSNamesystem: No KeyProvider found.16/10/26 03:30:05 INFO namenode.FSNamesystem: fsLock is fair:true16/10/26 03:30:06 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=100016/10/26 03:30:06 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true16/10/26 03:30:06 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.00016/10/26 03:30:06 INFO blockmanagement.BlockManager: The block deletion will start around 2016 Oct 26 03:30:0616/10/26 03:30:06 INFO util.GSet: Computing capacity for map BlocksMap16/10/26 03:30:06 INFO util.GSet: VM type = 64-bit16/10/26 03:30:06 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB16/10/26 03:30:06 INFO util.GSet: capacity = 2^21 = 2097152 entries16/10/26 03:30:06 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false16/10/26 03:30:06 INFO blockmanagement.BlockManager: defaultReplication = 116/10/26 03:30:06 INFO blockmanagement.BlockManager: maxReplication = 51216/10/26 03:30:06 INFO blockmanagement.BlockManager: minReplication = 116/10/26 03:30:06 INFO blockmanagement.BlockManager: maxReplicationStreams = 216/10/26 03:30:06 INFO blockmanagement.BlockManager: replicationRecheckInterval = 300016/10/26 03:30:06 INFO blockmanagement.BlockManager: encryptDataTransfer = false16/10/26 03:30:06 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 100016/10/26 03:30:06 INFO namenode.FSNamesystem: fsOwner = root (auth:SIMPLE)16/10/26 03:30:06 INFO namenode.FSNamesystem: supergroup = supergroup16/10/26 03:30:06 INFO namenode.FSNamesystem: isPermissionEnabled = true16/10/26 03:30:06 INFO namenode.FSNamesystem: HA Enabled: false16/10/26 03:30:06 INFO namenode.FSNamesystem: Append Enabled: true16/10/26 03:30:06 INFO util.GSet: Computing capacity for map INodeMap16/10/26 03:30:06 INFO util.GSet: VM type = 64-bit16/10/26 03:30:06 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB16/10/26 03:30:06 INFO util.GSet: capacity = 2^20 = 1048576 entries16/10/26 03:30:06 INFO namenode.NameNode: Caching file names occuring more than 10 times16/10/26 03:30:06 INFO util.GSet: Computing capacity for map cachedBlocks16/10/26 03:30:06 INFO util.GSet: VM type = 64-bit16/10/26 03:30:06 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB16/10/26 03:30:06 INFO util.GSet: capacity = 2^18 = 262144 entries16/10/26 03:30:06 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.999000012874603316/10/26 03:30:06 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 016/10/26 03:30:06 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 3000016/10/26 03:30:06 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 1016/10/26 03:30:06 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 1016/10/26 03:30:06 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,2516/10/26 03:30:06 INFO namenode.FSNamesystem: Retry cache on namenode is enabled16/10/26 03:30:06 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis16/10/26 03:30:06 INFO util.GSet: Computing capacity for map NameNodeRetryCache16/10/26 03:30:06 INFO util.GSet: VM type = 64-bit16/10/26 03:30:06 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB16/10/26 03:30:06 INFO util.GSet: capacity = 2^15 = 32768 entries16/10/26 03:30:06 INFO namenode.NNConf: ACLs enabled? false16/10/26 03:30:06 INFO namenode.NNConf: XAttrs enabled? true16/10/26 03:30:06 INFO namenode.NNConf: Maximum size of an xattr: 1638416/10/26 03:30:06 INFO namenode.FSImage: Allocated new BlockPoolId: BP-857467713-127.0.0.1-147746700675416/10/26 03:30:06 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted.16/10/26 03:30:07 INFO namenode.FSImageFormatProtobuf: Saving image file /tmp/hadoop-root/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression16/10/26 03:30:07 INFO namenode.FSImageFormatProtobuf: Image file /tmp/hadoop-root/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 351 bytes saved in 0 seconds.16/10/26 03:30:07 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 016/10/26 03:30:07 INFO util.ExitUtil: Exiting with status 016/10/26 03:30:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost.localdomain/127.0.0.1
************************************************************/[root@localhost hadoop-2.6.0-cdh5.8.2]#
格式化
截取后半部分,这样就表示格式化完成
2. sbin/start-dfs.sh
启动HDFS(NameNode,secondarynamenode,DataNode)
[root@localhost hadoop]# start-dfs.sh
16/10/26 03:57:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableStarting namenodes on [localhost]
localhost: starting namenode, logging to /opt/hadoop/hadoop-2.6.0-cdh5.8.2/logs/hadoop-root-namenode-localhost.localdomain.outlocalhost: starting datanode, logging to /opt/hadoop/hadoop-2.6.0-cdh5.8.2/logs/hadoop-root-datanode-localhost.localdomain.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /opt/hadoop/hadoop-2.6.0-cdh5.8.2/logs/hadoop-root-secondarynamenode-localhost.localdomain.out16/10/26 03:58:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2.4-06.jpg
启动完成以后我们调用"jps"命令看是否真的启动成功了
[root@localhost hadoop]# jps28442 Jps27137 NameNode27401 SecondaryNameNode27246 DataNode
Web浏览HDFS文件
到这一步我们可以通过ip地址访问HDFS文件系统。
[root@localhost hadoop]# ifconfig
inet **172.19.4.239** netmask 255.255.255.0 broadcast 172.19.4.255
inet6 fe80::250:56ff:fe8d:1144 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:8d:11:44 txqueuelen 1000 (Ethernet)
RX packets 1638661 bytes 777256881 (741.2 MiB)
RX errors 0 dropped 8125 overruns 0 frame 0
TX packets 333206 bytes 24964212 (23.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0我这里的地址为 172.19.4.239 那么外部访问的地址是:http://172.19.4.239:50070(默认的端口号)/就可以访问。
2.4-07.jpg
命令操作HDFS文件
我们讲到了配置-->启动,现在我们来讲讲对HDFS文件系统的操作,操作HDFS 在linux中的命令:
[root@localhost hadoop]# hdfs dfs
Usage: hadoop fs [generic options]
[-appendToFile <localsrc> ... <dst>]
[-cat [-ignoreCrc] <src> ...]
[-checksum <src> ...]
[-chgrp [-R] GROUP PATH...]
[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
[-chown [-R] [OWNER][:[GROUP]] PATH...]
[-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-count [-q] [-h] [-v] <path> ...]
[-cp [-f] [-p | -p[topax]] <src> ... <dst>]
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-df [-h] [<path> ...]]
[-du [-s] [-h] <path> ...]
[-expunge]
[-find <path> ... <expression> ...]
[-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
[-getfacl [-R] <path>]
[-getfattr [-R] {-n name | -d} [-e en] <path>]
[-getmerge [-nl] <src> <localdst>]
[-help [cmd ...]]
[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
[-mkdir [-p] <path> ...]
[-moveFromLocal <localsrc> ... <dst>]
[-moveToLocal <src> <localdst>]
[-mv <src> ... <dst>]
[-put [-f] [-p] [-l] <localsrc> ... <dst>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
[-rm [-f] [-r|-R] [-skipTrash] <src> ...]
[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
[-setfattr {-n name [-v value] | -x name} <path>]
[-setrep [-R] [-w] <rep> <path> ...]
[-stat [format] <path> ...]
[-tail [-f] <file>]
[-test -[defsz] <path>]
[-text [-ignoreCrc] <src> ...]
[-touchz <path> ...]
[-usage [cmd ...]]
Generic options supported are
-conf <configuration file> specify an application configuration file
-D <property=value> use value for given property
-fs <local|namenode:port> specify a namenode
-jt <local|resourcemanager:port> specify a ResourceManager
-files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster
-libjars <comma separated list of jars> specify comma separated jar files to include in the classpath.
-archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines.
The general command line syntax is
bin/hadoop command [genericOptions] [commandOptions]
**建立一个文件夹**
[root@localhost hadoop]# hdfs dfs -mkdir /user
16/10/26 04:10:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
**查看是否创建成功**
[root@localhost hadoop]# hdfs dfs -ls /
16/10/26 04:12:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x - root supergroup 0 2016-10-26 04:10 /user
简单命令就讲到这里以后会更单独讲解HDFS
2.5 分布式集群搭建
系统环境
名称 | 版本 | 下载地址 |
---|---|---|
centos | 7 | 百度 |
JDK | 7 | 百度 |
hadoop | CDH 2.6.0 | 下载地址 |
zero230 | 172.19.4.230 | |
zero231 | 172.19.4.231 | |
zero239 | 172.19.4.239 |
安装JDK
下载地址百度即可,我使用的JDK版本是 1.7 ;
2.5-01.jpg
1.在linux创建一个文件夹放jdk
mkdir /usr/jvm2.将jdk移到刚刚创建的JVM文件夹下,也可以解压到jvm文件夹下
我这里使用解压
tar -zxvf /opt/hadoop/tar/jdk-7u79-linux-x64.tar.gz -C /usr/jvm/3.解压完成以后配置JDK环境变量 /etc/profile
使用命令:
vi /etc/profile
2.5-02.jpg
将↓↓↓↓加在profile中
export JAVA_HOME=/usr/jvm/jdk1.7.0_79 export JAVA_BIN=/usr/jvm/jdk1.7.0_79/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#PATH
PATH=$PATH:$JAVA_HOME/bin
2.5-03.jpg
==在linux配置中有hadoop在这里先不要管==
4.到这里jdk配置已经完成了,我们需要刷新一下刚刚修改的profile。否则我们改改新配置的参数是无法生效的。
[root@zero230 tar]# source /etc/profile5.调用命令查看是否配置成功并且查看版本是否与我们配置的一致
2.5-04.jpg
[root@zero230 tar]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)到这里JDK已经安装完成!
SSH互免验证
1.在 zero230 zero231 zero239 机器上分别执行一下命令
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
执行完以后会获得 id_dsa(私钥) 和 id_dsa.pub(公钥) 两个文件2.在zero239 机器上执行该命令
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
意思就是将 公钥 的内容追加到 authorized_keys 文件中。3.将 zero231/zero230 的 id_dsa.pub(公钥)复制到zero239机器上
[root@zero230 ~]# scp -r ~/.ssh/id_dsa.pub root@zero239:~/.ssh/230.pub
[root@zero231 ~]# scp -r ~/.ssh/id_dsa.pub root@zero239:~/.ssh/231.pub
**注意:**在这里复制到zero239机器上必须重新命令否则会将 zero239 的给覆盖。4.将 230 231 机器上的 id_dsa.pub 复制到 239机器上了将他们追加到 "authorized_keys" 文件中。
[root@zero239 ~]# cat ~/.ssh/23*.pub >> ~/.ssh/authorized_keys
2.5-05.jpg
5.将239机器上已经添加了 230/231机器的公钥"authorized_keys"文件复制到230和231机器上
scp -r ~/.ssh/authorized_keys root@zero230:~/.ssh/
scp -r ~/.ssh/authorized_keys root@zero231:~/.ssh/
中有提示(yes/no),选择yes6.测试SSH是否互通
ssh zero230
回车即可,如果需要输入密码请检查是否配置正确
[root@zero239 ~]# ssh zero230
Last login: Thu Oct 27 14:56:54 2016 from a-bg-519.ztequantum.com
[root@zero230 ~]# exit
配置hadoop
1.将hadoop安装包复制到230 231 239 三台机器上
使用命令Scp
2.解压到/opt/hadoop(解压到那个目录下看自己,但一定要记得在哪个目录下)文件夹下,建议*三台机器上的hadoop存放的位置相同*
tar zxvf /opt/hadoop/tar/hadoop-2.6.0-cdh5.8.2.tar.gz -C /opt/hadoop/3.修改配置文件
首先我们要做分布式的Hadoop,那么配置一定需要将他们连串起来,否则怎么可以相互传递数据呢?
一.core-site.xml
参数|说明
----|----
fs.defaultFS|Namenode 定义,HDFS Url访问地址
io.file.buffer.size|设置缓存的大小
二.hdfs-site.xml
参数 | 说明 |
---|---|
dfs.namenode.name.dir | Namenode 存储的磁盘路径 |
dfs.datanode.data.dir | DataNode 存储的磁盘路径 |
dfs.blocksize | block的大小设置 |
dfs.replication | 节点数量设置,默认为3个。这里230 231 239三个节点,这里可以设置也可以不设置。 |
三.mapred-site.xml
参数 | 说明 |
---|---|
mapreduce.framwork.name | mapreduce.framework.name属性为yarn-tez,就可以替换默认的MR框架为tez引擎。就是管理yarn |
四.yarn-site.xml
参数 | 说明 |
---|---|
yarn.resourcemanager.hostname | resourcemanager 启动在那台机器上 |
五.slaves
将 zero239 zero230 zero231 主机名添加进去
2.5-06.jpg
4.配置修改完成以后将它复制分配到各个节点上\
scp -r /opt/hadoop/hadoop-2.6.0-cdh5.8.2/etc/hadoop/* root@zero230:/opt/hadoop/hadoop-2.6.0-cdh5.8.2/etc/hadoop/
scp -r /opt/hadoop/hadoop-2.6.0-cdh5.8.2/etc/hadoop/* root@zero231:/opt/hadoop/hadoop-2.6.0-cdh5.8.2/etc/hadoop/5.格式化hdfs
hdfs namenode -format
2.5-07.jpg
6.启动hadoop
方法一: start-dfs.sh 然后 yarn-start.sh
方法二:start-all.sh
2.5-08.jpg
7.查看进程是否全部启动使用命令:JPS 239机器:
[root@zero239 hadoop-2.6.0-cdh5.8.2]# jps
7518 NodeManager
6813 NameNode 7874 Jps 5292 DataNode 7113 SecondaryNameNode 7404 ResourceManager 230机器:
[root@zero230 ~]# jps
5690 Jps 5545 NodeManager 5692 DataNode 231机器
[root@zero231 ~]# jps
3855 NodeManager 3631 DataNode 4082 Jps
到这一步说明分布式集群搭建完成。
错误记录
[root@localhost ~]# hadoop jar /opt/hadoop/hadoop-2.6.0-cdh5.8.2/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.8.2.jar wordcount /input /ouput16/10/26 04:40:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable16/10/26 04:40:33 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:803216/10/26 04:40:34 WARN security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.net.ConnectException: Call From localhost.localdomain/127.0.0.1 to localhost:9001 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefusedjava.net.ConnectException: Call From localhost.localdomain/127.0.0.1 to localhost:9001 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:731)
at org.apache.hadoop.ipc.Client.call(Client.java:1475)
at org.apache.hadoop.ipc.Client.call(Client.java:1408)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:230)
at com.sun.proxy.$Proxy9.getFileInfo(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:762)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
at com.sun.proxy.$Proxy10.getFileInfo(Unknown Source)
at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2121)
at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1215)
at org.apache.hadoop.hdfs.DistributedFileSystem$19.doCall(DistributedFileSystem.java:1211)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1211)
at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1412)
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:145)
at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:270)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:143)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1307)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1304)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1304)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1325)
at org.apache.hadoop.examples.WordCount.main(WordCount.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:530)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:494)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:614)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:713)
at org.apache.hadoop.ipc.Client$Connection.access$2900(Client.java:375)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1524)
at org.apache.hadoop.ipc.Client.call(Client.java:1447)
... 41 more[root@localhost ~]#
问题:没有关闭防火墙
service iptables stop 关闭
chkconfig iptables off 永久关闭
2.6 课后作业
搭建一个3个节点的Hadoop分布式环境
用MR的方式实现第一课的作业,对文本进行统计,输出统计结果到HDFS
更多课程可以关注
【微信公众号】小张网校
公众号内有微信群,扫描加入后更多大牛交流学习
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)