Hadoop技术原理:
Hdfs主要模块:NameNode、DataNode
Yarn主要模块:ResourceManager、NodeManager
HDFS主要模块及运行原理:
1)NameNode:
功能:是整个文件系统的管理节点。维护整个文件系统的文件目录树,文件/目录的元数据和
每个文件对应的数据块列表。接收用户的请求。
2)DataNode:
功能:是HA(高可用性)的一个解决方案,是备用镜像,但不支持热备。
HDFS遵循主从架构,它具有以下元素:
(1)名称节点 -Namenode
名称节点是包含GNU/Linux操作系统和软件名称节点的普通硬件。它是一个可以在商品硬件上运行的软件。
具有名称节点系统作为主服务器,它执行以下任务:
管理文件系统命名空间。
规范客户端对文件的访问。
它也执行文件系统操作,如重命名,关闭和打开的文件和目录。
(2)数据节点 - Datanode
Datanode具有GNU/Linux操作系统和软件Datanode的普通硬件。对于集群中的每个节点(普通硬件/系统),有一个数据节点。
这些节点管理数据存储在它们的系统。
数据节点上的文件系统执行的读写操作,根据客户的请求。
还根据名称节点的指令执行操作,如块的创建,删除和复制。
(3)块 -block
一般用户数据存储在HDFS文件。在一个文件系统中的文件将被划分为一个或多个段和/或存储在个人数据的节点。
这些文件段被称为块。换句话说,数据的HDFS可以读取或写入的最小量被称为一个块。
缺省的块大小为64MB,但它可以增加按需要在HDFS配置来改变。
上图中展现了整个HDFS三个重要角色:NameNode、DataNode和Client
NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等
NameNode会将文件系统的Meta-data存储在内存中
这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等
DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data
同时周期性地将所有存在的Block信息发送给NameNode。
Client就是需要获取分布式文件系统文件的应用程序
这里通过三个操作,说明他们之间的交互关系:
文件写入:
- Client向NN(Nameode简称)发起文件写入的请求
- NN根据文件大小和文件块配置情况,返回给Client它所管理部分DN的信息
- Client将文件划分为多个Block,根据DN的地址信息,按顺序写入到每一个DN块中
文件读取:
- Client向NN发起文件读取的请求
- NN返回文件存储的DN信息
- Client读取文件信息
文件Blcok复制
- NN发现部分文件的Block不符合最小复制数或部分DN失效
- 统治DN相互复制block
- DN开始直接相互复制
实验环境:
172.25.58.1 安装hadoop
172.25.58.250 物理机
从真机上给server1发送jdk和hadoop的安装包
Hadoop是Java开发的,因此需要在服务器上安装相对应的JDK
ps:Linux默认自带JDK–openJDK–>Hadoop集群千万不要使用这个
将hadoop安装包上传到服务器
ps:实际开发中如需要其他安装包,请去官网下载
一、单机版的实现
1、创建hadoop用户,把相关安装包全部安装到该用户家目录下
[root@server1 ~]# ls
hadoop-3.0.3.tar.gz jdk-8u181-linux-x64.tar.gz
[root@server1 ~]# useradd -u 1000 hadoop
useradd: UID 1000 is not unique
[root@server1 ~]# useradd -u 1001 hadoop
[root@server1 ~]# mv * /home/hadoop
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz jdk-8u181-linux-x64.tar.gz
在hadoop用户下,进行解压以及软链接~~以便于后续设置环境变量
[hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ls
hadoop-3.0.3 jdk1.8.0_181
hadoop-3.0.3.tar.gz jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s hadoop-3.0.3 hadoop
[hadoop@server1 ~]$ ln -s jdk1.8.0_181 java
[hadoop@server1 ~]$ ll
total 488256
lrwxrwxrwx 1 hadoop hadoop 12 Dec 21 18:30 hadoop -> hadoop-3.0.3
drwxr-xr-x 9 hadoop hadoop 149 May 31 2018 hadoop-3.0.3
-rw-r--r-- 1 root root 314322972 Dec 21 18:26 hadoop-3.0.3.tar.gz
lrwxrwxrwx 1 hadoop hadoop 12 Dec 21 18:30 java -> jdk1.8.0_181
drwxr-xr-x 7 hadoop hadoop 245 Jul 7 2018 jdk1.8.0_181
-rw-r--r-- 1 root root 185646832 Dec 21 18:26 jdk-8u181-linux-x64.tar.gz
2、编辑环境变量的文件,写入java命令绝对路径方便命令使用
[hadoop@server1 ~]$ vim .bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/java/bin
[hadoop@server1 ~]$ source .bash_profile #使文件生效
[hadoop@server1 hadoop]$ vim hadoop-env.sh
54 export JAVA_HOME=/home/hadoop/java
[hadoop@server1 bin]$ jps #显示当前所有java进程pid的命令
2334 Jps
[hadoop@server1 ~]$ ls
hadoop hadoop-3.0.3.tar.gz jdk1.8.0_181
hadoop-3.0.3 java jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ cd java/
bin/
COPYRIGHT
include/
javafx-src.zip
jre/
lib/
LICENSE
man/
README.html
release
src.zip
THIRDPARTYLICENSEREADME-JAVAFX.txt
THIRDPARTYLICENSEREADME.txt
[hadoop@server1 ~]$ cd java/jre/
[hadoop@server1 jre]$ ls
bin LICENSE THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT plugin THIRDPARTYLICENSEREADME.txt
lib README Welcome.html
[hadoop@server1 jre]$ cd bin/
java对应的目录:
bin hadoop最近的管理脚本和使用脚本的目录
etc Hadoop配置文件所在的目录,包core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml
include 对外提供的编程库文件(具体存在着静态和动态链接,这些文件都是C++定义,通常适用于MapReduce)
lib 包含hadoop对外提供的编程静态和动态库,与include目录中的文件一起使用
libexec 各种服务对应上的shell配置文件所在的目录
sbin hadoop管理脚本的目录,包括HDFS和YARN的各种启动服务
share hadoop各个模块编译后jar包所在目录
ps:hadoop1.x版本是没有 yarn hadoop2.x之后提供的yarn
[hadoop@server1 hadoop]$ cat workers #当前的用户是localhost
localhost
3、进行测试~~~
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ cp *.xml /home/hadoop/hadoop/in
include/ input/
[hadoop@server1 hadoop]$ cp *.xml /home/hadoop/hadoop/input/
[hadoop@server1 hadoop]$ cd /home/hadoop/hadoop/
操作debug运行一个程序~~~
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
利用examples这个jar示例文件包,进行测试
测试结果:
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000 _SUCCESS
[hadoop@server1 output]$ cat *
1 dfsadmin
结果即将input目录中的文件传到本地的output目录中
此时单机版搭建已经完毕~~~
二、伪分布式的实现过程如下
1、做本机的免密
[hadoop@server1 hadoop]$ ssh-keygen
[hadoop@server1 hadoop]$ su
[root@server1 hadoop]# passwd hadoop
[root@server1 hadoop]# su - hadoop
[hadoop@server1 ~]$ ssh-copy-id localhost
2、此时的workers文件里面既可以写localhost,也可以写ip地址
为了后续实验方便,此时写ip地址
[hadoop@server1 ~]$ vim /home/hadoop/hadoop/etc/hadoop/workers
172.25.58.1
3、设置slave为本机
本机一个节点开启datanode进程
具体配置过程https://hadoop.apache.org/# 官方网站上有
设置slave节点
[hadoop@server1 ~]$ cat /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml 副本接替
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
设置master节点
[hadoop@server1 tmp]$ cd /home/hadoop/hadoop/etc/hadoop/core-site.xml 定义主节点
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.25.58.1:9000</value>
</property>
</configuration>
进行初始化:
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
初始化后会出现一些临时文件,都在/tmp中
[hadoop@server1 hadoop]$ cd /tmp/
[hadoop@server1 tmp]$ ls
hadoop hadoop-hadoop hadoop-hadoop-namenode.pid hsperfdata_hadoop
开启服务并且查看,此时datanode和namenode进程均开启在本节点上
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [sever1]
sever1: Warning: Permanently added 'sever1,172.25.58.1' (ECDSA) to the list of known hosts.
Starting datanodes
Starting secondary namenodes [server1]
server1: Warning: Permanently added 'server1,fe80::5054:ff:fef0:98d4%eth0' (ECDSA) to the list of known hosts.
[hadoop@server1 hadoop]$ jps
3266 Jps
3128 SecondaryNameNode
2815 NameNode
2927 DataNode
[hadoop@server1 hadoop]$ ps ax
2604 ? S< 0:00 [kworker/0:0H]
2815 ? Sl 0:05 /home/hadoop/java/bin/java -Dproc_namenode -
2927 ? Sl 0:04 /home/hadoop/java/bin/java -Dproc_datanode -
3128 ? Sl 0:02 /home/hadoop/java/bin/java -Dproc_secondaryn
3200 ? Ss 0:00 /usr/sbin/anacron -s
3276 pts/1 R+ 0:00 ps ax
下载net-tools工具时出现报错:
[hadoop@server1 hadoop]$ sudo yum install net-tools-2.0-0.17.20131004git.el7.x86_64 -y
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
linux下面无法运行sudo命令
(a)进入超级用户模式。
输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式。(当然,你也可以直接用root用)
(b)添加文件的写权限。
输入命令"chmod u+w /etc/sudoers"。
(c)编辑/etc/sudoers文件。
输入命令"vim /etc/sudoers",进入编辑模式,找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存退出。
(d)撤销文件的写权限。
输入命令"chmod u-w /etc/sudoers"。
此时即可以进行下载net-tools工具~~
[hadoop@server1 ~]$ netstat -antlp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9866 0.0.0.0:* LISTEN 2927/java
tcp 0 0 0.0.0.0:9867 0.0.0.0:* LISTEN 2927/java
tcp 0 0 0.0.0.0:9868 0.0.0.0:* LISTEN 3128/java
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 2815/java
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:36935 0.0.0.0:* LISTEN 2927/java
tcp 0 0 0.0.0.0:9864 0.0.0.0:* LISTEN 2927/java
tcp 0 0 172.25.58.1:9000 0.0.0.0:* LISTEN 2815/java
tcp 0 0 172.25.58.1:22 172.25.58.250:50556 ESTABLISHED -
tcp 0 0 172.25.58.1:56848 172.25.58.1:9000 ESTABLISHED 2927/java
tcp 0 0 172.25.58.1:9000 172.25.58.1:56848 ESTABLISHED 2815/java
tcp 0 0 172.25.58.1:56886 172.25.58.1:9000 TIME_WAIT -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:25 :::* LISTEN -
tcp6 0 0 ::1:22 ::1:51498 ESTABLISHED -
tcp6 0 0 ::1:51498 ::1:22 ESTABLISHED 2581/ssh
在真机上做好解析后,进行测试~~~
http:172.25.58.1:9870
截图如下:
查看主机信息:(可以看到此时主机内存还没有被占用)
[hadoop@server1 ~]$ cd /home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
[hadoop@server1 ~]$ cd /home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
Configured Capacity: 18238930944 (16.99 GB)
Present Capacity: 15336062976 (14.28 GB)
DFS Remaining: 15336054784 (14.28 GB)
DFS Used: 8192 (8 KB)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (1):
Name: 172.25.58.1:9866 (sever1)
Hostname: sever1
Decommission Status : Normal
Configured Capacity: 18238930944 (16.99 GB)
DFS Used: 8192 (8 KB)
Non DFS Used: 2902867968 (2.70 GB)
DFS Remaining: 15336054784 (14.28 GB)
DFS Used%: 0.00%
DFS Remaining%: 84.08%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Sat Dec 21 19:16:39 EST 2019
Last Block Report: Sat Dec 21 19:01:01 EST 2019
测试,创建目录,并上传:
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls #创建之前,ls的话会出错
ls: `.': No such file or directory
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop 创建hadoop存储的家目录(这里似乎得创建两次目录,不能一下子创建完)
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls #由于还没有在里边存储数据
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input #上传到分布之文件系统中
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2019-12-21 19:21 input
[hadoop@server1 hadoop]$ sudo yum install -y bash-*
这下就可以table补齐了
可以看到上传的目录
删除input和output文件,重新执行命令
[hadoop@server1 hadoop]$ rm -fr input/ output/
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
**此时input和output不会出现在当前目录下,而是上传到了分布式文件系统中,网页上可以看到**
[hadoop@server1 hadoop]$ bin/hdfs dfs -cat output/*
1 dfsadmin
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output ##从分布式系统中get下来output目录
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000 _SUCCESS
[hadoop@server1 output]$ cat *
1 dfsadmin
三、分布式的搭建
注意:
- blocksize:1.X是64M 2.X是128M
- 启动失败,重新formant格式化即可
实验前提:停止server1上的服务
1、先停掉服务,清除原来的数据
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
[hadoop@server1 hadoop]$ jps
4375 Jps
[hadoop@server1 hadoop]$ cd /tmp
[hadoop@server1 tmp]$ rm -rf *
2、新开两个虚拟机,当做节点
##创建用户
[root@server2 ~]# useradd -u 1001 hadoop
[root@server3 ~]# useradd -u 1001 hadoop
##安装nfs-utils
[root@server1 ~]# yum install -y nfs-utils
[root@server2 ~]# yum install -y nfs-utils
[root@server3 ~]# yum install -y nfs-utils
[root@server1 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl start rpcbind
[root@server3 ~]# systemctl start rpcbind
exportfs命令
- -a 全部挂载或者全部卸载
- -r 重新挂载
- -u 卸载某一个目录
- -v 显示共享目录
3、server1开启服务,配置
[root@server1 ~]# systemctl start nfs-server
[root@server1 ~]# vim /etc/exports
/home/hadoop *(rw,anonuid=1001,anongid=1001)
[root@server1 ~]# exportfs -rv #重新挂载,并且显示创建的共享目录
exporting *:/home/hadoop
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *
showmount命令用于查询NFS服务器的相关信息
# showmount --help
Usage: showmount [-adehv]
[--all] [--directories] [--exports]
[--no-headers] [--help] [--version] [host]
-a或--all
以 host:dir 这样的格式来显示客户主机名和挂载点目录。
-d或--directories
仅显示被客户挂载的目录名。
-e或--exports
显示NFS服务器的输出清单。
-h或--help
显示帮助信息。
-v或--version
显示版本信。
--no-headers
禁止输出描述头部信息。
4、server2,3挂载
[root@server2 ~]# mount 172.25.58.1:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 17811456 1094872 16716584 7% /
devtmpfs 497292 0 497292 0% /dev
tmpfs 508264 0 508264 0% /dev/shm
tmpfs 508264 13076 495188 3% /run
tmpfs 508264 0 508264 0% /sys/fs/cgroup
/dev/sda1 1038336 141512 896824 14% /boot
tmpfs 101656 0 101656 0% /run/user/0
172.25.58.1:/home/hadoop 17811456 2840704 14970752 16% /home/hadoop
5、此时发现可以免密登录(因为是挂载上的)
6、重新编辑server1的文件
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://172.25.58.1:9000</value>
</property>
</configuration>
[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value> ##改为两个节点
</property>
</configuration>
[hadoop@server1 hadoop]$ vim workers
[hadoop@server1 hadoop]$ cat workers
172.25.58.2
172.25.58.3
##在一个地方编辑,其他节点都有了
[root@server2 ~]# su - hadoop
Last login: Sat Apr 6 11:32:41 CST 2019 from server1 on pts/1
[hadoop@server2 ~]$ cd hadoop/etc/hadoop/
[hadoop@server2 hadoop]$ cat workers
172.25.58.2
172.25.58.3
[root@server3 ~]# su - hadoop
Last login: Sat Apr 6 11:32:41 CST 2019 from server1 on pts/1
[hadoop@server3 ~]$ cd hadoop/etc/hadoop/
[hadoop@server3 hadoop]$ cat workers
172.25.58.2
172.25.58.3
7、进行格式化,并启动服务
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [sever1]
Starting datanodes
172.25.58.3: Warning: Permanently added '172.25.58.3' (ECDSA) to the list of known hosts.
172.25.58.2: Warning: Permanently added '172.25.58.2' (ECDSA) to the list of known hosts.
Starting secondary namenodes [server1]
[hadoop@server1 hadoop]$ jps
5159 SecondaryNameNode
4937 NameNode
5273 Jps
##从节点可以看到datanode信息
[hadoop@server2 ~]$ jps
11959 DataNode
12046 Jps
[hadoop@server3 ~]$ jps
2616 DataNode
2702 Jps
8、进行测试
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
出现的问题:
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop
mkdir: Cannot create directory /user/hadoop. Name node is in safe mode.
此时出出现error,name node在安全模式下:
原因:
(1)、当namenode发现集群中的block丢失数量达到一个阀值时,namenode就进入安全模式状态,不再接受客户端的数据更新请求
(2)、在正常情况下,namenode也有可能进入安全模式:
集群启动时(namenode启动时)必定会进入安全模式,然后过一段时间会自动退出安全模式(原因是datanode汇报的过程有一段持续时间)
也确实有异常情况下导致的安全模式
原因:block确实有缺失
措施:可以手动让namenode退出安全模式,bin/hdfs dfsadmin -safemode leave
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -safemode leave
Safe mode is OFF
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
总结:当salve的datanode不能开启时,就将master和slave的/tmp下所有文件删除,然后重新格式化,start...此时就好了~~~
server4模拟客户端
[root@server4 ~]# useradd -u 1000 hadoop
[root@server4 ~]# yum install -y nfs-utils
[root@server4 ~]# systemctl start rpcbind
[root@server4 ~]# mount 172.25.14.1:/home/hadoop /home/hadoop
[root@server4 ~]# su - hadoop
[hadoop@server4 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server4 hadoop]$ vim workers
172.25.14.2
172.25.14.3
172.25.14.4
[hadoop@server4 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server4 hadoop]$ sbin/hadoop-daemon.sh start ##开启datanode节点服务datanode
[hadoop@server4 hadoop]$ jps
2609 Jps
2594 DataNode
浏览器查看,节点添加成功~~
[hadoop@server4 hadoop]$ dd if=/dev/zero of=bigfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 25.8653 s, 20.3 MB/s
[hadoop@server4 hadoop]$ bin/hdfs dfs -put bigfile