2012-03-08 33 views
7

Tôi đang cố gắng thiết lập một cụm phân phối Hbase với 2 nút, một là máy của tôi và một là VM, sử dụng bộ điều hợp "chỉ lưu trữ" trong VirtualBox.HBase: Cách xác định tên máy chủ cho Hbase master

Vấn đề của tôi là máy chủ khu vực (từ máy ảo) không thể kết nối với máy chủ Hbase chạy trên máy chủ. Mặc dù trong HBase vỏ tôi có thể liệt kê, tạo bảng, ..., trong regionserver trên VM máy ('nô lệ'), nhật ký luôn hiển thị

org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master.  Retrying. Error was: 
java.net.ConnectException: Connection refused 

Trước đây, tôi đã thành công cài đặt Hadoop, HDFS và MapReduce trên cụm này với 2 nút có tên là 'master', và 'slave', 'master' làm nút chính và cả hai 'master' và 'slave' làm nút slave, những tên này gắn với giao diện vboxnet0 của VirtualBox (tên máy chủ trong/etc/tên máy chủ là khác nhau). Tôi cũng chỉ định thuộc tính "slave.host.name" cho mỗi nút là 'master' và 'slave'.

Có vẻ như Hbase master trên 'master' luôn chạy với tên máy chủ 'localhost', từ máy phụ thuộc, tôi không thể telnet đến master chủ với tên máy chủ 'master'. Vì vậy, có cách nào để chỉ định việc sử dụng tên máy chủ cho Hbase master là 'master', tôi đã thử chỉ định một số thuộc tính về giao diện DNS cho ZooKeeper, Master, RegionServer để sử dụng giao diện nội bộ giữa master và slave, nhưng nó vẫn không hoạt động .

/etc/hosts cho cả hai như là một cái gì đó giống như

127.0.0.1 localhost 
127.0.0.1 ubuntu.mymachine 

# For Hadoop 
192.168.56.1 master 
192.168.56.101 slave 

# The following lines are desirable for IPv6 capable hosts 
::1  ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

Trả lời

2

file host của tôi là như

127.0.0.1 localhost

192.168.2.118 shashwat.machine.com shashwat

đặt tệp lưu trữ của bạn như sau:

127.0.0.1 localhost

Đối với Hadoop

192.168.56.1 chủ

192.168.56.101 nô lệ

và HBase conf đặt mục sau:

<property> 
<name>hbase.rootdir</name> 
<value>hdfs://master:9000/hbase</value> 
</property> 
<property> 
<name>hbase.master</name> 
<value>master:60000</value> 
<description>The host and port that the HBase master runs at.</description> 
</property> 
<property> 
<name>hbase.regionserver.port</name> 
<value>60020</value> 
<description>The host and port that the HBase master runs at.</description> 
<property> 
<name>hbase.cluster.distributed</name> 
<value>true</value> 
</property> 
<property> 
<name>hbase.tmp.dir</name> 
<value>/home/cluster/Hadoop/hbase-0.90.4/temp</value> 
</property> 
<property> 
<name>hbase.zookeeper.quorum</name> 
<value>master</value> 
</property> 
<property> 
<name>dfs.replication</name> 
<value>2</value> 
</property> 
<property> 
<name>hbase.zookeeper.property.clientPort</name> 
<value>2181</value> 
<description>Property from ZooKeeper's config zoo.cfg. 
The port at which the clients will connect. 
</description> 
</property> 

Nếu bạn đang sử dụng localhost ywhere loại bỏ và thay thế bằng "bậc thầy", đó là tên cho namenode trong hostfile của bạn ....

một morething bạn có thể làm

sudo gedit/etc/hostname

này sẽ mở ra tệp hostname bydefault ubuntu sẽ ở đó để làm cho nó thành thạo. và khởi động lại hệ thống của bạn.

Đối với HBase xác định trong tập tin "regionserver" bên trong conf dir đặt những mục

chủ nô lệ

và restart.everything.

+0

Câu trả lời hay. Một truy vấn mới, Có thể tạo một cụm HBase mà không cần chỉnh sửa tệp 'hosts' không? (Tôi đặc biệt có nghĩa là trong cửa sổ) –

0

Có hai điều mà sửa chữa lớp này của vấn đề đối với tôi:

1) Hủy bỏ tất cả "localhost" tên, chỉ có 127.0.0.1 trỏ đến tên của nút hmaster.

2) chạy "tên máy chủ X" trên nút chủ cơ sở của bạn, để đảm bảo tên máy chủ khớp với những gì nằm trong/etc/hosts.

Không phải là một chuyên gia về mạng, tôi không thể nói tại sao điều này là quan trọng, nhưng nó là :)

0

Hầu hết thời gian lỗi là đến từ Zookeeper rằng gửi một hostname sai.

Bạn có thể kiểm tra những gì Zookeeper gửi như máy chủ tổng thể HBase:

Tìm Zookeeper thư mục bin:

bin/zkCli.sh -server 127.0.0.1:2181 
get /hbase/master 

này nên cung cấp cho bạn các bậc thầy IP HBase mà trả lời Zookeeper, vì vậy chỉ IP này phải được truy cập.

2

Câu trả lời mà @Infinity cung cấp dường như thuộc về phiên bản ~ 0.9.4.

Dành cho phiên bản 1.1.4.

theo mã nguồn từ

org.apache.hadoop.hbase.master.HMaster 

cấu hình nên là:

<property> 
    <name>hbase.master.hostname</name> 
    <value>master.local</value> 
    <!-- master.local is the DNS name in my network pointing to hbase master --> 
    </property> 

Sau khi thiết lập giá trị này, các máy chủ khu vực có khả năng kết nối với chủ HBase; Tuy nhiên, trong môi trường của mình, máy chủ khu vực phàn nàn về:

com.google.protobuf.ServiceException: java.net.SocketException: Invalid argument 

Vấn đề biến mất sau khi tôi cài đặt oracle JDK 8 thay vì mở jdk-7 trong tất cả các nút của tôi.

Vì vậy, trong kết luận, đây là giải pháp của tôi:

  • sử dụng tên dns máy chủ thay vì cài đặt/etc/hosts, như HBase là rất kén cá chọn canh trên hostname và dường như đòi hỏi tra cứu DNS cũng như đảo ngược Tra cứu DNS.

  • nâng cấp jdk để oracle 8

  • sử dụng mục thiết lập nêu trên.

Các vấn đề liên quan