HADOOP 環境 搭建

安裝前準備(各服務器環境保持一致)

  1. 硬件環境
    hadoop只能安裝在linux或unix服務器之上。
    3臺或以上linux服務器(10.20.143.12,10.20.149.83,10.20.149.84)。若是使用windows服務器,則須要安裝cygwin,在cygwin中部署hadoop
  2. java環境
    jdk 1.6及以上
  3. 配置3臺機器別名
    vi /etc/hosts
    增長內容

    10.249.200.157 h1
    10.249.196.166 h2 
    10.249.196.3 h3
  4. 建立hadoop用戶用於安裝hadoop

    useradd hadoop
  5. 配置ssh
    hadoop在運行時讀取dfs中文件,機器之間須要互相無密碼ssh,這時就須要配置機器之間的dsa/rsa。配置方式可參考以下:

    rm -rf ~/.ssh
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    /usr/bin/ssh-keygen -t rsa
    /usr/bin/ssh-keygen -t dsa
    touch ~/.ssh/authorized_keys
      
    cd ~/.ssh
    ssh hadoop@10.20.149.83 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.149.83 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys
    ssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys
      
    ssh本機也須要無密碼
      
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
      
    chmod 600 ~/.ssh/authorized_keys

    完成後可以使用ssh命令驗證如:ssh h1,來確認 html

  6. 下載hadoop
    使用版本爲0.20.2.0
    解壓hadoop

    tar -xzvf  hadoop-0.20.2.0.tar

    如今hadoop路徑爲/home/hadoop/hadoop-0.20.2.0 java

開始安裝(主要在h1機器上進行)

  1. 配置master內容以下

    cat /home/hadoop/hadoop-0.20.2.0/conf/masters
    10.20.143.12
  2. 配置slaves內容以下

    cat /root/hadoop/hadoop-0.20.2.0/conf/slaves
    10.20.149.83
    10.20.149.84
  3. 在每臺機器上建立相同的目錄結構用於存放數據文件

    mkdir -p data/tmp
    mkdir -p data/data
    mkdir -p data/name
  4. 配置hadoop環境變量文件

    vi $HADOOP_HOME/conf/hadoop-env.sh

    增長內容 node


    export JAVA_HOME=/usr/alibaba/java
    export HADOOP_HOME=/home/hadoop/hadoop-0.20.2.0
  5. 配置conf/core-site.xml文件

    more conf/core-site.xml
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      
    <!-- Put site-specific property overrides in this file. -->
      
    <configuration>
      
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/home/hadoop/data/temp</value>
                    <description>A base for other temporary directories.</description>
            </property>
            <property>
                    <name>fs.default.name</name>
                    <value>hdfs://h1:9000</value>
                    <description>The name of the default file system.  A URI whose
                            scheme and authority determine the FileSystem implementation.  The
                            uri scheme determines the config property (fs.SCHEME.impl) naming
                            the FileSystem implementation class.  The uri authority is used to
                            determine the host, port, etc. for a filesystem.</description>
            </property>
    </configuration>
  6. 配置conf/mapred-site.xml

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      
    <!-- Put site-specific property overrides in this file. -->
      
    <configuration>
      
            <property>
                    <name>mapred.job.tracker</name>
                    <value>h1:8021</value>
                    <description>The host and port that the MapReduce job tracker runs
                            at.  If 'ocal' then jobs are run in-process as a single map
                            and reduce task.
                    </description>
            </property>
    </configuration>
  7. 配置conf/hdfs-site.xml

    more conf/hdfs-site.xml
      
    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      
    <!-- Put site-specific property overrides in this file. -->
      
    <configuration>
      
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
      
            <property>
                    <name>dfs.data.dir</name>
                    <value>/home/hadoop/data/data</value>
            </property>
            <property>
                    <name>dfs.name.dir</name>
                    <value>/home/hadoop/data/name</value>
            </property>
      
    </configuration>
  8. 修改conf/hadoop-env.sh文件將日誌放到統一位置

    export HADOOP_LOG_DIR=/home/hadoop/0.20.2/log/hadoop
  9. 將master上配置好的配置文件複製到slave上去

    scp conf/*.* h2:/home/hadoop/hadoop-0.20.2.0/conf/
    scp conf/*.* h3:/home/hadoop/hadoop-0.20.2.0/conf/
  10. 啓動hadoop
    格式化namenode

    bin/hadoop namenode -format

    啓動hadoop守護進程 linux


    bin/start-all.sh

查看結果

  1. html管理連接
    可使用兩個默認連接來查看job運行狀況和空間使用狀況
    NameNode - http://h1:50070/
    JobTracker - http://h1:50030/
  2. 執行一個分佈式計算
    將輸入文件拷貝到分佈式文件系統:

    $ bin/hadoop fs -put conf input

    運行發行版提供的示例程序: apache


    $ bin/hadoop jar hadoop-examples-0.20.2.0.jar grep input output 'dfs[a-z.]+'

    查看輸出文件:
    將輸出文件從分佈式文件系統拷貝到本地文件系統查看: windows


    $ bin/hadoop fs -get output output
    $ cat output/*

    在分佈式文件系統上查看輸出文件: 安全

    $ bin/hadoop fs -cat output/*
  3. 集羣調整
    datanode或者tasktracker crash,或者須要向集羣中增長新的機器時又不能重啓集羣。
    1. 把新機器的增長到conf/slaves文件中(datanode或者tasktracker crash則可跳過)
    2. 在新機器上進入hadoop目錄,啓動守護進程

      $bin/hadoop-daemon.sh start datanode
      $bin/hadoop-daemon.sh start tasktracker
    3. 在namenode上

      $bin/hadoop balancer

錯誤列表

  1. 啓動Datanode是報Incompatible namespaceIDs錯誤
    在某次從新執行sh hadoop namenode -format後,啓動Datanode時出現Incompatible namespaceIDs錯誤。
    緣由:每次namenode format會從新建立一個namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的數據,可是沒有晴空datanode下的數據,致使啓動時失敗
    解決方法:
    1. 方法1
      1. 中止集羣
      2. 刪除有問題節點的數據:conf/hdfs-site.xml裏配置的dfs.data.dir目錄
      3. 從新執行namenode format
      4. 啓動集羣
    2. 方法2
      1. 中止數據節點
      2. 編輯<dfs.data.dir>/current/VERSION的值,使其等於namenode的當前值
      3. 重啓datanode
  1. 搭建好的h1 h2 h3是:

    10.249.200.157 h1
    10.249.196.166 h2
    10.249.196.3   h3 服務器

    ssh打通失敗看這裏:

    1. 機器上執行ssh-keygen -t rsa生成密鑰,碰倒提示直接回車。
    2. 將每臺機器/$home/.ssh目錄下的id_rsa.pub拷貝到/$home/.ssh/authorized_keys文件中。
    3. 可是發現始終仍是須要驗證密碼才能ssh跳轉。原來目錄的權限設置有關係,好比hadoop用戶,$home/hadoop 目錄設置爲700,authorized_keys設置爲400,由於linux處於安全考慮。另外:authorized_keys文件中兩個不一樣的條目最好換行空開。

    爲了debug因此在linux上搭建一個單機的hadoop

    參考下面幾篇文章: eclipse

    咱們使用的hadoop是0.20.2 ssh

    下載地址:http://labs.renren.com/apache-mirror/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz

    http://www.51testing.com/?uid-159438-action-viewspace-itemid-211599

    http://hadoop.apache.org/common/docs/r0.20.2/cn/quickstart.html#Local

    http://hi.baidu.com/yuweiming/blog/item/6bf4242db074c420359bf744.html

    core-site.xml mapred-site.xml hdfs-site.xml 這三個文件的配置就參考這篇文章,h1換成本身的ip

    datax若是沒有的話,能夠手工把hdfs文件拷貝過去。

    bin/hadoop fs  -mkdir -p /datax/noah/dev

    bin/hadoop fs  -chmod -R 777 /datax/noah

     
    先從h1 上把datax經過的文件下載的本地磁盤,好比c:\hadoopTmp
    而後在上傳到本身開發環境的單機hadoop上。

    hadoop-debug的方法

    http://code.google.com/p/hadoop-clusternet/wiki/DebuggingJobsUsingEclipse

    hadoop debug時只能使用本地文件,不能使用hdfs

    1.準備一個本地配置文件 hadoop-local.xml

    <?xml version="1.0" ?> <configuration> <property> <name>fs.default.name</name> <value>file:///</value> </property> <property> <name>mapred.job.tracker</name> <value>local</value> </property> </configuration>
    2.$HADOOP_HOME/bin/hadoop最後一行加入以下啓動參數:
    exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=7777,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"

    3.打包運行時使用以下:
    hadoop-debug jar distReport.jar -conf hadoop-local.xml  -distReportInputPath input  -distReportOutputPath result

    4.eclipse鏈接遠程debug

    命令集合:
    1.解決權限問題hdfs權限問題    hadoop fs  -chmod -R 777 /datax/noah
    2.linux下建立hdfs文件夾: hadoop fs  -mkdir -p /datax/noah/dev
    3.複製文件命令:hadoop fsf -cp /data/file1 /data/file2
    4.添加文件hadoop fs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
    5.hadoop fs -copyFromLocal input/docs/tt.txt /user/tom/tt.txt
    6.hadoop fs -copyToLocal tt.txt tt.coy.txt
相關文章
相關標籤/搜索