hdfs 2个stadyname怎么hdfs 切换用户

NameNode HA配置详解 - 为程序员服务
NameNode HA配置详解
10580 阅读
HDFS 集群中NameNode 存在单点故障(SPOF )。对于只有一个NameNode 的集群,如果NameNode 机器出现意外downtime,那么整个集群将无法使用,直到NameNode 重新启动。HDFS 的HA 功能通过配置Active/Standby 两个NameNodes 实现在集群中对NameNode 的热备来解决上述问题。如果出现Active NN的downtime,就会切换到Standby使得NN服务不间断。HDFS HA依赖zookeeper,下面是测试的过程。
主机:debugo0[1-3],CentOS 6.5
Hadoop 2.4.1
ZooKeeper 3.4.6
NN,ZKFC,JournalNode,DN
NN,ZKFC,JournalNode,DN
NN,JournalNode,DN
1. 启动ZooKeeper
编辑zookeeper配置文件$ mkdir -p /home/hadoop/zooKeeper /home/hadoop/log/zoolog
$ cd $ZOOKEEPER_HOME/conf
$ cp zoo_sample.cnf zoo.cnf
$ vim zoo.cnf
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/zookeeper
dataLogDir=/home/hadoop/log/zoolog
clientPort=2181将配置文件拷贝到另外两个节点,分别建立myid并启动zookeeper$ echo
"1" & /home/hadoop/zookeeper/myid
$ zkServer start
$ zkServer status
zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
2. 修改Hadoop配置
core-site中需要使用ha.zookeeper.quorum设置ZooKeeper服务器节点。另外fs.defaultFS需要设置成HDFS的逻辑服务名(需与hdfs-site.xml中的dfs.nameservices一致)。$ core-site.xml
&configuration&
&property&
&name&fs.defaultFS&/name&
&value&hdfs://myhdfs&/value&
&/property&
&property&
&name&hadoop.tmp.dir&/name&
&value&/home/hadoop/tmp&/value&
&/property&
&property&
&name&hadoop.logfile.size&/name&
&value&&/value&
&/property&
&property&
&name&hadoop.logfile.count&/name&
&value&10&/value&
&/property&
&property&
&name&io.file.buffer.size&/name&
&value&131072&/value&
&/property&
&property&
&name&ha.zookeeper.quorum&/name&
&value&debugo01,debugo02,debugo03&/value&
&/property&
&/configuration&hdfs-site.xml中需要添加的设置较多:
dfs.nameservices —– HDFS NN的逻辑名称,使用上面设置的myhdfs
dfs.ha.namenodes.myhdfs —– 给定服务逻辑名称myhdfs的节点列表
dfs.namenode.rpc-address.myhdfs.nn1 —–
myhdfs中nn1节点对外服务的RPC地址
dfs.namenode.http-address.myhdfs.nn1 —– myhdfs中nn1节点对外服务的http地址
dfs.namenode.shared.edits.dir —– 设置一组 journalNode 的 URI 地址,active NN 将 edit log 写入这些JournalNode,而 standby NameNode 读取这些 edit log,并作用在内存中的目录树中。如果journalNode有多个节点则使用分号分割。该属性值应符合以下格式qjournal://host1:port1;host2:port2;host3:port3/journalId
dfs.journalnode.edits.dir —– JournalNode 所在节点上的一个目录,用于存放 editlog 和其他状态信息。
dfs.ha.automatic-failover.enabled —– 启动自动failover。自动failover依赖于zookeeper集群和ZKFailoverController(ZKFC),后者是一个zookeeper客户端,用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc。zkfs提供了下面的功能:
Health monitoring
zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。
ZooKeeper session management
当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个”ephemeral”的节点作为锁,一旦本
地NN失效了,那么这个节点将会被自动删除。
ZooKeeper-based election
如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。
启动zkfc的方法如下:hadoop-daemon.sh start zkfc。通过start-dfs.sh会自动启动该进程,一般无需手动起停。
dfs.client.failover.proxy.provider.myhadoop —– 客户端与 active NameNode 进行交互的 Java 实现类,DFS 客户端通过该类寻找当前的active NN。
dfs.ha.fencing.methods —– 解决HA集群脑裂问题(即出现两个 master 同时对外提供服务,导致系统处于不一致状态)。在 HDFS HA中,JournalNode 只允许一个 NameNode 写数据,不会出现两个 active NameNode 的问题,
但是,当主备切换时,之前的 active NameNode 可能仍在处理客户端的 RPC 请求,为此,需要增加隔离机制(fencing)将之前的 active NameNode 杀死。常用的fence方法是sshfence,要指定ssh通讯使用的密钥dfs.ha.fencing.ssh.private-key-files和连接超时时间。
$ hdfs-site.xml
&configuration&
&property&
&name&dfs.nameservices&/name&
&value&myhdfs&/value&
&/property&
&property&
&name&dfs.ha.namenodes.myhdfs&/name&
&value&nn1,nn2&/value&
&/property&
&property&
&name&dfs.namenode.rpc-address.myhdfs.nn1&/name&
&value&debugo01:8020&/value&
&/property&
&property&
&name&dfs.namenode.rpc-address.myhdfs.nn2&/name&
&value&debugo02:8020&/value&
&/property&
&property&
&name&dfs.namenode.http-address.myhdfs.nn1&/name&
&value&debugo01:50070&/value&
&/property&
&property&
&name&dfs.namenode.http-address.myhdfs.nn2&/name&
&value&debugo02:50070&/value&
&/property&
&property&
&name&dfs.namenode.shared.edits.dir&/name&
&value&qjournal://debugo01:8485;debugo02:8485;debugo03:8485/hadoop-journal&/value&
&/property&
&property&
&name&dfs.ha.automatic-failover.enabled&/name&
&value&true&/value&
&/property&
&property&
&name&dfs.journalnode.edits.dir&/name&
&value&/home/hadoop/journal&/value&
&/property&
&property&
&name&dfs.client.failover.proxy.provider.myhadoop&/name&
&value&org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider&/value&
&/property&
&property&
&name&dfs.ha.fencing.methods&/name&
&value&sshfence&/value&
&description&how to communicate in the switch process&/description&
&/property&
&property&
&name&dfs.ha.fencing.ssh.private-key-files&/name&
&value&/home/hadoop/.ssh/id_rsa&/value&
&description&the location stored ssh key&/description&
&/property&
&property&
&name&dfs.ha.fencing.ssh.connect-timeout&/name&
&value&5000&/value&
&/property&
&property&
&name&dfs.datanode.data.dir&/name&
&value&/home/hadoop/data&/value&
&/property&
&property&
&name&dfs.namenode.name.dir&/name&
&value&/home/hadoop/namenode&/value&
&/property&
&property&
&name&dfs.namenode.handler.count&/name&
&value&8&/value&
&/property&
&property&
&name&dfs.replication&/name&
&value&2&/value&
&/property&
&/configuration&
3. 启动NameNode HA
初始化zkfcmkdir /home/hadoop/journal /home/hadoop/data /home/hadoop/namenode
hdfs zkfc -formatZK
/09/13 21:17:03 INFO zookeeper.ClientCnxn: Opening socket connection to server debugo02/192.168.46.202:2181. Will not attempt to authenticate using SASL (unknown error)
/09/13 21:17:03 INFO zookeeper.ClientCnxn: Socket connection established to debugo02/192.168.46.202:2181, initiating session
/09/13 21:17:03 INFO zookeeper.ClientCnxn: Session establishment complete on server debugo02/192.168.46.202:2181, sessionid = 0xe0000, negotiated timeout = 5000
/09/13 21:17:03 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/myhdfs in ZK.第一次启动格式化HDFS。 格式化HDFS的过程中,HA会journalnode通讯,所以需要先把三个节点的journalnode启动。
hdfs journalnode
hdfs namenode -format
通过start-dfs.sh 直接启动所有服务$ start-dfs.sh
Starting namenodes on [debugo01 debugo02]
debugo01: starting namenode, logging to /opt/hadoop/logs/hadoop-hadoop-namenode-debugo01.out
debugo02: starting namenode, logging to /opt/hadoop/logs/hadoop-hadoop-namenode-debugo02.out
debugo01: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo01.out
debugo02: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo02.out
debugo03: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo03.out
Starting journal nodes [debugo01 debugo02 debugo03]
debugo01: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo01.out
debugo03: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo03.out
debugo02: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo02.out
Starting ZK Failover Controllers on NN hosts [debugo01 debugo02]
debugo01: starting zkfc, logging to /opt/hadoop/logs/hadoop-hadoop-zkfc-debugo01.out
debugo02: starting zkfc, logging to /opt/hadoop/logs/hadoop-hadoop-zkfc-debugo02.out
DFSZKFailoverController
JournalNode
QuorumPeerMain使用浏览器访问debugo01:50070会看到该节点已经成为active
先启动的namenode会成为active,在standby的日志中可以看到定期replication
-09-13 21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Starting CacheReplication
Monitor with interval 30000 milliseconds
-09-13 21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Rescanning because of pen
ding operations
-09-13 21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Scanned 0 directive(s) an
d 0 block(s) in 1 millisecond(s).
下面需要同步一次元数据:$ hdfs namenode -bootstrapStandby
About to bootstrap Standby ID nn1 from:
Nameservice ID: myhdfs
Other Namenode ID: nn2
Other NN's HTTP address: http://debugo02:50070
Other NN's IPC
address: debugo02/192.168.46.202:8020
Namespace ID:
Block pool ID: BP-2.168.46.202-0
Cluster ID: CID-c98eb846-66b5--a091eb1718d1
Layout version: -56
=====================================================
Re-format filesystem in Storage Directory /home/hadoop/namenode ? (Y or N) Y这时候访问
然后kill掉debugo01上的active NN进程,standby NN会成为active。
注意:手动切换时,会提示下面警告。所以一般在启动zkfc的情况下也无需进行切换。$ hdfs haadmin -transitionToActive nn1
Automatic failover is enabled for NameNode at debugo01/192.168.46.201:8020. Refusing to manually manage HA state, since it may cause a split-brain scenario or other incorrect state.
If you are very sure you know what you are doing, please
specify the forcemanual flag.
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/cdh4hag_topic_2_3.html
http://blog.csdn.net/u/article/details/
http://blog.csdn.net/chenpingbupt/article/details/7922089
HDFS 集群中NameNode 存在单点故障(SPOF )。对于只有一个NameNode 的集群,如果NameNode 机器出现意外downtime,那么整个集群将无法使用,直到NameNode 重新启动。HDFS 的HA 功能通过配置Active/Standby 两个NameNodes 实现在集群中对NameNode 的热备来解决上述问题。如果出现Active NN的downtime,就会切换到Standby使得NN服务不间断。HDFS HA依赖zookeeper,下面是测试的过程。
主机:debugo0[1-3],CentOS 6.5
Hadoop 2.4.1
ZooKeeper 3.4.6
1. 启动ZooKeeper
$ mkdir -p /home/hadoop/zooKeeper /home/hadoop/log/zoolog
$ cd $ZOOKEEPER_HOME/conf
$ cp zoo_sample.cnf zoo.cnf
$ vim zoo.cnf
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/zookeeper
dataLogDir=/home/hadoop/log/zoolog
clientPort=2181
将配置文件拷贝到另外两个节点,分别建立myid并启动zookeeper
 > /home/hadoop/zookeeper/myid
$ zkServer start
$ zkServer status
zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader
2. 修改Hadoop配置
core-site中需要使用ha.zookeeper.quorum设置ZooKeeper服务器节点。另外fs.defaultFS需要设置成HDFS的逻辑服务名(需与hdfs-site.xml中的dfs.nameservices一致)。
$ core-site.xml
fs.defaultFS
hdfs://myhdfs
hadoop.tmp.dir
/home/hadoop/tmp
hadoop.logfile.size
hadoop.logfile.count
io.file.buffer.size
ha.zookeeper.quorum
debugo01,debugo02,debugo03
hdfs-site.xml中需要添加的设置较多:
dfs.nameservices —– HDFS NN的逻辑名称,使用上面设置的myhdfs
dfs.ha.namenodes.myhdfs —– 给定服务逻辑名称myhdfs的节点列表
dfs.namenode.rpc-address.myhdfs.nn1 —–
myhdfs中nn1节点对外服务的RPC地址
dfs.namenode.http-address.myhdfs.nn1 —– myhdfs中nn1节点对外服务的http地址
dfs.namenode.shared.edits.dir —– 设置一组 journalNode 的 URI 地址,active NN 将 edit log 写入这些JournalNode,而 standby NameNode 读取这些 edit log,并作用在内存中的目录树中。如果journalNode有多个节点则使用分号分割。该属性值应符合以下格式qjournal://host1:port1;host2:port2;host3:port3/journalId
dfs.journalnode.edits.dir —– JournalNode 所在节点上的一个目录,用于存放 editlog 和其他状态信息。
dfs.ha.automatic-failover.enabled —– 启动自动failover。自动failover依赖于zookeeper集群和ZKFailoverController(ZKFC),后者是一个zookeeper客户端,用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc。zkfs提供了下面的功能:
Health monitoring
zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。
ZooKeeper session management
当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个”ephemeral”的节点作为锁,一旦本
地NN失效了,那么这个节点将会被自动删除。
ZooKeeper-based election
如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。
启动zkfc的方法如下:hadoop-daemon.sh start zkfc。通过start-dfs.sh会自动启动该进程,一般无需手动起停。
dfs.client.failover.proxy.provider.myhadoop —– 客户端与 active NameNode 进行交互的 Java 实现类,DFS 客户端通过该类寻找当前的active NN。
dfs.ha.fencing.methods —– 解决HA集群脑裂问题(即出现两个 master 同时对外提供服务,导致系统处于不一致状态)。在 HDFS HA中,JournalNode 只允许一个 NameNode 写数据,不会出现两个 active NameNode 的问题,
但是,当主备切换时,之前的 active NameNode 可能仍在处理客户端的 RPC 请求,为此,需要增加隔离机制(fencing)将之前的 active NameNode 杀死。常用的fence方法是sshfence,要指定ssh通讯使用的密钥dfs.ha.fencing.ssh.private-key-files和连接超时时间。
$ hdfs-site.xml
dfs.nameservices
dfs.ha.namenodes.myhdfs
dfs.namenode.rpc-address.myhdfs.nn1
debugo01:8020
dfs.namenode.rpc-address.myhdfs.nn2
debugo02:8020
dfs.namenode.http-address.myhdfs.nn1
debugo01:50070
dfs.namenode.http-address.myhdfs.nn2
debugo02:50070
dfs.namenode.shared.edits.dir
qjournal://debugo01:8485;debugo02:8485;debugo03:8485/hadoop-journal
dfs.ha.automatic-failover.enabled
dfs.journalnode.edits.dir
/home/hadoop/journal
dfs.client.failover.proxy.provider.myhadoop
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
how to communicate in the switch process
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
the location stored ssh key
dfs.ha.fencing.ssh.connect-timeout
dfs.datanode.data.dir
/home/hadoop/data
dfs.namenode.name.dir
/home/hadoop/namenode
dfs.namenode.handler.count
dfs.replication
mkdir /home/hadoop/journal /home/hadoop/data /home/hadoop/namenode
hdfs zkfc -formatZK
14/09/13 21:17:03 INFO zookeeper.ClientCnxn: Opening socket connection to server debugo02/192.168.46.202:2181. Will not attempt to authenticate using SASL (unknown error)
14/09/13 21:17:03 INFO zookeeper.ClientCnxn: Socket connection established to debugo02/192.168.46.202:2181, initiating session
14/09/13 21:17:03 INFO zookeeper.ClientCnxn: Session establishment complete on server debugo02/192.168.46.202:2181, sessionid = 0xe0000, negotiated timeout = 5000
14/09/13 21:17:03 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/myhdfs in ZK.
第一次启动格式化HDFS。 格式化HDFS的过程中,HA会journalnode通讯,所以需要先把三个节点的journalnode启动。
hdfs journalnode
hdfs namenode -format
通过start-dfs.sh 直接启动所有服务
$ start-dfs.sh
Starting namenodes on [debugo01 debugo02]
debugo01: starting namenode, logging to /opt/hadoop/logs/hadoop-hadoop-namenode-debugo01.out
debugo02: starting namenode, logging to /opt/hadoop/logs/hadoop-hadoop-namenode-debugo02.out
debugo01: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo01.out
debugo02: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo02.out
debugo03: starting datanode, logging to /opt/hadoop/logs/hadoop-hadoop-datanode-debugo03.out
Starting journal nodes [debugo01 debugo02 debugo03]
debugo01: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo01.out
debugo03: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo03.out
debugo02: starting journalnode, logging to /opt/hadoop/logs/hadoop-hadoop-journalnode-debugo02.out
Starting ZK Failover Controllers on NN hosts [debugo01 debugo02]
debugo01: starting zkfc, logging to /opt/hadoop/logs/hadoop-hadoop-zkfc-debugo01.out
debugo02: starting zkfc, logging to /opt/hadoop/logs/hadoop-hadoop-zkfc-debugo02.out
11031 NameNode
11494 DFSZKFailoverController
11324 JournalNode
11136 DataNode
7657 QuorumPeerMain
使用浏览器访问debugo01:50070会看到该节点已经成为active
先启动的namenode会成为active,在standby的日志中可以看到定期replication
21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Starting CacheReplication
Monitor with interval 30000 milliseconds
21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Rescanning because of pen
ding operations
21:25:46,132 INFO org.apache.hadoop.hdfs.server.blockmanagement.CacheReplicationMonitor: Scanned 0 directive(s) an
d 0 block(s) in 1 millisecond(s).
下面需要同步一次元数据:
hdfs namenode -bootstrapStandby
……
About to bootstrap Standby ID nn1 from:
Nameservice ID: myhdfs
Other Namenode ID: nn2
Other NN’s HTTP address: http://debugo02:50070
Other NN’s IPC
address: debugo02/192.168.46.202:8020
Namespace ID:
Block pool ID: BP-2.168.46.202-0
Cluster ID: CID-c98eb846-66b5--a091eb1718d1
Layout version: -56
=====================================================
Re-format filesystem in Storage Directory /home/hadoop/namenode ? (Y or N) Y
这时候访问
然后kill掉debugo01上的active NN进程,standby NN会成为active。
注意:手动切换时,会提示下面警告。所以一般在启动zkfc的情况下也无需进行切换。
hdfs haadmin -transitionToActive nn1
Automatic failover is enabled for NameNode at debugo01/192.168.46.201:8020. Refusing to manually manage HA state, since it may cause a split-brain scenario or other incorrect state.
If you are very sure you know what you are doing, please
specify the forcemanual flag.
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-High-Availability-Guide/cdh4hag_topic_2_3.html
http://blog.csdn.net/u/article/details/
http://blog.csdn.net/chenpingbupt/article/details/7922089
原文地址:, 感谢原作者分享。
您可能感兴趣的代码HDFS的NameNode和DataNode有什么区别?_百度知道
HDFS的NameNode和DataNode有什么区别?
我有更好的答案
HDFS是一种分布式文件系统,Hadoop集群借此来存储所有需要分析的输入数据以及由MapReduce作业生成的任何输出结果。HDFS是一种基于数据块的文件系统,它跨越集群中的多个节点,并且使用用户数据可以存储在文件中。它提供了传统的分层文件组织,以便用户或应用程序可以操作(创建、重命名、移动或删除)文件和目录。它还提供了一个流接口,借助于该接口,可使用MapReduce框架运行所选的任何应用程序。HDFS不支持设置硬链接或软链接,因此用户无法寻址到特定数据块或者覆盖文件。HDFS要求进行编程访问,因此用户无法作为文件系统装载。所有HDFS通讯都根据TCP/IP协议分层。
HDFS的关键组件有:
NameNode:单一主元数据服务器,其中包含每个文件、文件位置以及这些文件及其所在的DataNode内的所有数据块的内存映射。
DataNode:每个集群节点均有一个从属DataNode,它为读/写请求提供服务以及按照NameNode的指令执行数据块创建、删除和复制。
采纳率:40%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。在本次操作中所用到的命令
1.首先启动HDFS
$HADOOP_HOME/sbin/start-dfs.sh
2.关防火墙
切换到root用户,执行service iptables stop
3.拷贝文件到HDFS
bin/hadoop fs -put 本地 HDFS
4.查看HDFS根目录的文件
bin/hadoop fs -ls /
1.新建Java项目,导入Hadoop相关jar包。
在hadoop解压包中的hadoop-2.6.0\share\hadoop\common目录下红色标注的文件全部拷贝
在hadoop-2.6.0\share\hadoop\hdfs目录下红色标注的文件全部拷贝
然后在Java项目中构建配置路径
2.编写代码
FileSystem fileS
public void init() throws Exception{
//读取数据由平台上的协议确定
URI uri = new URI("hdfs://192.168.*.*:9000");
Configuration conf = new Configuration();
fileSystem = FileSystem.get(uri, conf);
* 查看目录
public void Catalog() throws Exception{
Path path = new Path("/poker");
FileStatus fileStatus = fileSystem.getFileStatus(path);
System.out.println("*************************************");
System.out.println("文件根目录: "+fileStatus.getPath());
System.out.println("这文件目录为:");
for(FileStatus fs : fileSystem.listStatus(path)){
System.out.println(fs.getPath());
* 浏览文件
public void look() throws Exception{
Path path = new Path("/core-site.xml");
FSDataInputStream fsDataInputStream = fileSystem.open(path);
System.out.println("*************************************");
System.out.println("浏览文件:");
while((c = fsDataInputStream.read()) != -1){
System.out.print((char)c);
fsDataInputStream.close();
* 上传文件
public void upload() throws Exception{
Path srcPath = new Path("C:/Users/Administrator/Desktop/hadoop/hadoop.txt");
Path dstPath = new Path("/");
fileSystem.copyFromLocalFile(false, srcPath, dstPath);
fileSystem.close();
System.out.println("*************************************");
System.out.println("上传成功!");
* 下载文件
public void download() throws Exception{
InputStream in = fileSystem.open(new Path("/hadoop.txt"));
OutputStream out = new FileOutputStream("E://hadoop.txt");
IOUtils.copyBytes(in, out, 4096, true);
* 删除文件
public void delete() throws Exception{
Path path = new Path("hdfs://192.168.*.*:9000/hadoop.txt");
fileSystem.delete(path,true);
System.out.println("*************************************");
System.out.println("删除成功!");
3.运行时发现出现用户没有权限的错误。
解决方法:
1.修改HDFS根目录的权限
2.把Hadoop权限验证关闭,把hadoop.dll文件放到C:/windows/system32中,然后修改hdfs-site.xml文件,把验证关闭
&property&
& & &&name&dfs.permissions&/name&
& & &&value&false&/value&
&/property&
3.伪造用户 -DHADOOP_USER_NAME=用户名
阅读(...) 评论()}

我要回帖

更多关于 hdfs的username 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信