1. 程式人生 > >hadoop集群配置和在windows系統上運用java操作hdfs

hadoop集群配置和在windows系統上運用java操作hdfs

sdn 自帶 aux mkdir del 服務 services export rop

  • 安裝
  • 配置
  • 概念
  • hadoop常用shell命令
  • 使用java操作hadoop

本文介紹hadoop集群配置和在windows系統上運用java操作hdfs

安裝

http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.1/

sudo apt-get install ssh
sudo apt-get install rsync

mkdir /usr/local/hadoop
tar -zxvf hadoop-3.1.1.tar.gz -C /usr/local/hadoop

sudo vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.1
export PATH=.:${JAVA_HOME}/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile

hadoop version 

配置

  1. 服務器

    主機名配置
        hostname 查看主機名
        sudo vim /etc/hostname 修改主機名
    
        sudo vim /etc/hosts 添加如下配置
            192.168.76.128  master
            192.168.76.129  worker
    
        shutdown -r now 重啟電腦 
    
    配置集群ssh免密登陸
        cd .ssh
        rm id_rsa id_rsa.pub
        ssh-keygen -t rsa
        進入master主機 cat id_rsa.pub >> authorized_keys
        進入worker主機 ssh-copy-id -i master
        進入master主機 chmod 600 authorized_keys
        進入master主機 scp /root/.ssh/authorized_keys worker:/root/.ssh/
    
    cd /usr/local/hadoop/hadoop-3.1.1/
  2. hadoop-env.sh

    sudo vim etc/hadoop/hadoop-env.sh
    添加如下配置
    export JAVA_HOME=/usr/src/jdk-11.0.1
  3. core-site.xml

    sudo vim etc/hadoop/core-site.xml
    <configuration>
        <!-- 配置NameNode -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://master:9000</value>
        </property>
    
        <!-- 配置數據目錄,用來存放文件 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/hadoopdata</value> 
        </property>
    </configuration>
  4. hdfs-site.xml

    sudo vim etc/hadoop/hdfs-site.xml
    <configuration>
        <!-- 配置副本數量 -->
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
    </configuration>
  5. yarn-site.xml

    sudo vim etc/hadoop/yarn-site.xml
    添加如下配置
    <configuration>
    
        <!--  配置管理者-->
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
        </property>
    
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce-shuffle</value>
        </property>
    </configuration>
  6. mapred-site.xml

    cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
    sudo vim etc/hadoop/mapred-site.xml
        添加如下配置
        <configuration>
            <!--  配置集群運行方式-->
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
            </property>
            <property>
                <name>mapred.job.tracker</name>
                <value>master:9001</value>
            </property>
        </configuration>
  7. start-dfs.sh

    sudo vim sbin/start-dfs.sh
    添加如下配置
    HDFS_DATANODE_USER=root
    HDFS_DATANODE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
  8. stop-dfs.sh

    sudo vim sbin/stop-dfs.sh
    添加如下配置
    HDFS_DATANODE_USER=root
    HDFS_DATANODE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
  9. start-yarn.sh

    sudo vim sbin/start-yarn.sh
    添加如下配置
    YARN_RESOURCEMANAGER_USER=root
    HDFS_DATANODE_SECURE_USER=yarn
    YARN_NODEMANAGER_USER=root
  10. stop-yarn.sh

    添加如下配置
    YARN_RESOURCEMANAGER_USER=root
    HDFS_DATANODE_SECURE_USER=yarn
    YARN_NODEMANAGER_USER=root
  11. 運行

    進入master運行 hdfs namenode -format               # 格式化
    進入master運行 hadoop-daemon.sh start namenode     # 開始文件系統
    進入worker運行 hadoop-daemon.sh start datanode     # 開始文件系統
    jps                                 # 查看啟動的namenode
    netstat -ant                        # 查看50070端口是否建立連接
    
    訪問 http://master:50070 即可看到管理界面

概念

hdfs集群 負責文件讀寫,namenode管理,datanode負責存儲

yarn集群 為mapreduce程序分配硬件資源,resourcemanager需要單獨放在另外一臺服務器,nodemanager部署在datanode上

hadoop常用shell命令

hadoop fs -ls /                     查看fdfs根目錄
hadoop fs -put file1.txt /          上傳文件到fdfs根目錄
hadoop fs -cat /file1.txt           查看文件內容
hadoop fs -mkdir -p /tests/test     創建文件夾

運行自帶的mapreduce程序 
cd /usr/local/hadoop/hadoop-2.9.2/share/hadoop/mapreduce
計算指定/tests/test文件夾下面文件的個數,並且將結果放在/test/count下
hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /tests/test /test/count       

使用java操作hadoop

  1. 依賴

    缺一不可
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>3.1.1</version>
    </dependency>
  2. 在你當前操作系統中添加host信息

    C:\WINDOWS\system32\drivers\etc\hosts 修改此文件
    192.168.76.128  master
    192.168.76.129  worker
  3. 上傳文件

    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    fs.copyFromLocalFile(new Path("F:/test.txt"),new Path("/"));
  4. 下載文件

    下載文件需要當前操作系統也要有hadoop環境,關於windows系統裝hadoop環境的步驟如下
    1. http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common 下載一個hadoop版本
    2. http://download.csdn.net/detail/wuxun1997/9841472 下載windows需要的工具包
    3. 解壓hadoop並且配置HADOOP_HOME環境變量,並且在PATH裏加上%HADOOP_HOME%\bin
    4. 將工具包解壓的文件放置在hadoop文件夾的bin目錄中,並且將hadoop.dll放置於c:/windows/System32中即可
    
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    fs.copyToLocalFile(new Path("/test.txt"), new Path("F:/"));
  5. 創建文件夾

    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    fs.mkdirs(new Path("/app/test"));
  6. 列出根目錄所有的文件

    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path("/"), true);
    while (iterator.hasNext()){
        LocatedFileStatus next = iterator.next();
        System.out.println(next.getPath());
    }
  7. 列出根目錄所有的文件和文件夾

    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
    for (int i = 0; i < fileStatuses.length; i++) {
        FileStatus fileStatus = fileStatuses[i];
        System.out.println(fileStatus.getPath());
    }
  8. 刪除文件

    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","hdfs://master:9000");
    FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
    fs.delete(new Path("/test.txt"), true);

hadoop集群配置和在windows系統上運用java操作hdfs