2016-06-17 5 views
0

Я запустил Hbase несколько дней назад и просматриваю все материалы онлайн.Понимание клиента Java HBase

Я установил и настроил команды HBase и оболочки, которые работают нормально.

У меня есть пример клиента Java для получения данных из таблицы HBase и он успешно выполнен, но я не мог понять, как он работает? В коде нигде мы не упомянули порт, хост сервера Hbase? Как он может извлекать данные из таблицы?

Это мой код:

public class RetriveData { 

    public static void main(String[] args) throws IOException { 

     // Instantiating Configuration class 
     Configuration config = HBaseConfiguration.create(); 

     // Instantiating HTable class 
     @SuppressWarnings({ "deprecation", "resource" }) 
     HTable table = new HTable(config, "emp"); 

     // Instantiating Get class 
     Get g = new Get(Bytes.toBytes("1")); 

     // Reading the data 
     Result result = table.get(g); 

     // Reading values from Result class object 
     byte [] value = result.getValue(Bytes.toBytes("personal data"),Bytes.toBytes("name")); 

     byte [] value1 = result.getValue(Bytes.toBytes("personal data"),Bytes.toBytes("city")); 

     // Printing the values 
     String name = Bytes.toString(value); 
     String city = Bytes.toString(value1); 

     System.out.println("name: " + name + " city: " + city);   
    } 

} 

Выход выглядит следующим образом:

Output:
name: raju city: hyderabad

ответ

1

Я согласен с Бинарные полудурков ответить

добавив немного более интересную информацию для лучшего понимания.

Ваш вопрос:

Я не мог понять, как это работает? В коде нигде у нас нет , упомянутого порта, хоста сервера Hbase? Как он может получить данные из таблицы?

Поскольку вы выполняете эту программу в кластере

// Instantiating Configuration class 
    Configuration config = HBaseConfiguration.create() 

все свойства кластера будут позаботились внутри кластера .. так как вы в кластере, и вы выполняете программу клиента HBase Java. .

Теперь попробуйте, как показано ниже (выполнить ту же программу по-разному от удаленного затмения машины на окнах, чтобы узнать разницу в том, что вы делали ранее и сейчас).

public static Configuration configuration; // this is class variable 
     static { //fill clusternode1,clusternode2,clusternode3 from your cluster 
      configuration = HBaseConfiguration.create(); 
      configuration.set("hbase.zookeeper.property.clientPort", "2181"); 
      configuration.set("hbase.zookeeper.quorum", 
      "clusternode1,clusternode2,clusternode3"); 
      configuration.set("hbase.master", "clusternode1:600000"); 
     } 

Надеюсь, что это поможет вам понять.

1

Если вы посмотрите на исходный код для HBaseConfiguration на github вы можете увидеть, что он делает когда он вызывает create().

public static Configuration create() { 
    Configuration conf = new Configuration(); 
    // In case HBaseConfiguration is loaded from a different classloader than 
    // Configuration, conf needs to be set with appropriate class loader to resolve 
    // HBase resources. 
    conf.setClassLoader(HBaseConfiguration.class.getClassLoader()); 
    return addHbaseResources(conf); 
    } 

Последовал:

public static Configuration addHbaseResources(Configuration conf) { 
    conf.addResource("hbase-default.xml"); 
    conf.addResource("hbase-site.xml"); 

    checkDefaultsVersion(conf); 
    HeapMemorySizeUtil.checkForClusterFreeMemoryLimit(conf); 
    return conf; 
    } 

Так его загрузки конфигурации из файлов конфигурации Hbase hbase-default.xml и hbase-site.xml.

+0

Спасибо. Это действительно помогает понять основную реализацию. Если мы хотим, чтобы java-клиент выполнялся с удаленного хоста, нам нужно переопределить конфигурацию, как предлагается ** RamaPrada G ** ниже. –

+0

Да, вы можете настроить конфигурацию напрямую с помощью 'conf.set()' или скопировать эти файлы xml и загрузить их. В любом случае он должен иметь тот же эффект. –

Смежные вопросы