Hadoop與HBase中遇到的問題
1. Hadoop中遇到的問題
以前所遇到的問題由於沒有記錄,所以忘了
(1)NameNode沒有啟動成功, 是由於你對HDFS多次格式化,導致datanode中與namenode中的VERSION檔案中的namespaceID不一致(對於NameNode節點,該檔案位於hdfs-site配置檔案中dfs.name.dir引數所指定的路徑下的current資料夾中, 對於DataNode節點, 該檔案位於hdfs-site配置檔案中dfs.data.dir引數所指定的路徑下的current資料夾中.
解決方法: 第一種是把namespaceID的值改成一致,然後重啟Hadoop;第二種刪除dfs.name.dir與dfs.data.dir引數指定的目錄,然後使用bin/hadoop namenode -formate 重新格式化,這種方法有風險, 因為會刪除所有原來在HDFS上的檔案.
(2)Eclipse的Run On Hadoop就是一個坑, 其根本就沒執行在叢集上, (可以通過job.setNumReduceTasks設定ReducerTask個數,無論你設定多少個,都只有一個,因為執行在本地,只是檔案資料在叢集上, 也就是說Mapper與Reducer任務都執行在本地; 還可以通過控制檯資訊檢視到: 如果是叢集上則會有這樣的資訊Running job: job_201405090934_0024, 如果是本地任務,則會顯示Running job: job_local426339719_0001,看到沒有, 中間有個local; 還可以通過web node1:50030檢視任務執行情況,如果是本地任務,則不會在上面顯示).
解決方法: 如果需要執行在叢集上,要做三件事,如下:
//特別注意: 一定要設定,不然會報cannot read partitioner file錯誤
conf.set("fs.default.name","node1:49000");
//特別注意: 一定要設定,不然不會執行在叢集上
conf.set("mapred.job.tracker","node1:49001");
//特別注意: 對相關類以及依賴的jar檔案進行打包,這是執行在叢集上必須要做的一步,不然叢集找不到相關的Mapper等類檔案
File jarpath;
try {
jarpath = JarTools.makeJar("bin");
conf.set("mapred.jar", jarpath.toString());
} catch (Exception e) {
logger.error("進行jar打包出錯!");
e.printStackTrace();
return;
}
(3) Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在執行時,Run Configurations 在Arguments中的 VM arguments 新增-Djava.library.path=/home/hadoop/hadoop-1.2.1/lib/native/Linux-i386-32
該路徑依據你的實際路徑為準
2.HBase問題
(1) Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (無法定位登入配置)
22:32:56,821 WARN ClientCnxn:1089 - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:567)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068)
22:32:56,951 WARN RecoverableZooKeeper:253 - Possibly transient ZooKeeper, quorum=localhost:2181, exception=org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /hbase/hbaseid
22:32:56,952 INFO RetryCounter:155 - Sleeping 1000ms before retry #0...
這是因為在程式碼中沒有設定Zookeeper叢集
//設定zookeeper叢集
HBASE_CONFIG.set("hbase.zookeeper.quorum", "node2,node3,node4,node5,node6,node7,node8");
最好還設定HMaster
//設定HMatser
HBASE_CONFIG.set("hbase.zookeeper.master","node1:60000");
(2)
JobClient:1422 - Task Id : attempt_201405081252_0008_m_000000_0, Status : FAILED
java.lang.IllegalArgumentException: Can't read partitions file
at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:116)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:676)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:756)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.io.FileNotFoundException: File /tmp/partitions_de363500-5535-466b-91bb-36472457386d does not exist.
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:402)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:255)
at org.apache.hadoop.fs.FileSystem.getLength(FileSystem.java:816)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1479)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1474)
at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.readPartitions(TotalOrderPartitioner.java:301)
at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:88)
... 10 more
因為在生成HFile時使用了HFileOutputFormat與TotalOrderPartitioner(HFile對RowKey需要進行全域性排序),所以需要分割槽檔案, 但是TaskTracker找不到分割槽檔案,要想TaskTracker讀取分割槽檔案,該文字必須存在與HDFS上, 所以需要設定一個引數:
Configuration conf = HbaseOperation.HBASE_CONFIG;
conf.set("fs.default.name","node1:49000");
對於具體解釋,還需進一步研究.
(3)Wrong number of partitions in keyset
說明你的分割槽檔案中的分割槽個數不等於reducer的個數減一,即Regions的個數不等於reducer的個數減一,其實是因為你的任務執行在本地(這樣只有一個Reducer),而Regions有多個,有興趣可以檢視TotalOrderPartitioner
的原始碼, 中間有一段程式碼為:
for (int i = 0; i < splitPoints.length - 1; ++i) {
if (comparator.compare(splitPoints[i], splitPoints[i+1]) >= 0) {
throw new IOException("Split points are out of order");
}
}
HFileOutputFormat.configureIncrementalLoad(job, table);自動對job進行配置。TotalOrderPartitioner是需要先對key進行整體排序,然後劃分到每個reduce中,保證每一個reducer中的的key最小最大值區間範圍,是不會有交集的。因為入庫到HBase的時候,作為一個整體的Region,key是絕對有序的。暫時寫到這裡, 有些問題不記得了,以後遇到問題會繼續更新,....
相關文章
- Hadoop與HBase中遇到的問題(續)java.io.IOException: Non-increasing Bloom keys異常HadoopJavaExceptionOOM
- hadoop遇到的問題(彙總)Hadoop
- hadoop啟動遇到的各種問題Hadoop
- 面試中遇到的問題面試
- javaweb中自己遇到的問題JavaWeb
- laravel使用中遇到的問題Laravel
- Hodoop配置中遇到的問題OdooOOP
- 工作中遇到的問題
- FLEX4與JAVA通訊中遇到的問題FlexJava
- JavaCV與OpenCV的區別和使用中遇到的問題JavaOpenCV
- kafka 運維中遇到的問題Kafka運維
- weex學習中遇到的問題
- hive學習中遇到的問題Hive
- 【專案中遇到的zookeeper的問題】
- 學習中遇到的javabean中的scope問題JavaBean
- 今天遇到的問題與解決方法
- 安裝ambari的時候遇到的ambari和hadoop問題集Hadoop
- 關於工作中遇到的問題
- loadrunner學習中遇到的問題
- 實際專案中遇到的問題
- 橫趟!面試中遇到的 ZooKeeper 問題面試
- @UpdateProvider註解中遇到的問題IDE
- 安裝 Laravel Mix 中遇到的問題Laravel
- Vue使用中遇到的程式碼問題Vue
- Linux ~ CentOS使用中遇到的問題LinuxCentOS
- MERGE開發中遇到的問題
- 面試中遇到的一些問題面試
- CKEditor使用中遇到的問題解決
- Fragstas軟體使用中遇到的問題
- 安裝mysql中遇到的問題1MySql
- 利用JAXP解析xml中遇到的問題XML
- 爬蟲過程中遇到的問題爬蟲
- FastDFS與Nginx的搭建及遇到的問題ASTNginx
- 有待整理的工作中遇到的問題
- Hadoop中hdfs和Hbase Xceivers設定Hadoop
- Hadoop3系列——(八)Java訪問HbaseHadoopJava
- 學習vue過程中遇到的問題Vue
- 學習Java中遇到的繼承問題Java繼承