У меня два сервера. Первый сервер (A) содержит zookeeper, базу данных mongodb и буровое долото. Второй сервер (B) содержит дистрибутив Hadoop с несколькими таблицами кустов, базой данных postgresql и другой деталью. Оба сверла могут видеть друг друга на домашних страницах сверла, так как они оба подключены к zookeeper на сервере A. Когда выполняется запрос, подобный приведенному ниже (представление dfs.lineorder состоит из данных куста и postgresql на сервере B), сверло Б становится прорабом и все выполняет. Он не делегирует части, связанные с таблицами mongodb, сверлильному станку на сервере A, поэтому 90% времени, необходимого для выполнения запроса (около 30 минут), тратится на отправку коллекции mongodb с сервера A на сервер B. Есть ли способ заставить Drillbit B делегировать часть запроса mongodb Drillbit B, или это может быть проблема с неправильной настройкой? Кроме того, можно ли настроить сверла для доступа к разным базам данных (например, когда каждое сверло имеет доступ к отдельной подсети, чтобы не все сверла могли обращаться к одним и тем же базам данных)?
Пример запроса: ВЫБЕРИТЕ СУММУ(доход) КАК доход ОТ ( ВЫБЕРИТЕ СУММУ(lo_extendedprice*lo_discount) КАК доход ИЗ dfs.tmp.lineorder, dfs.tmp.date
ГДЕ lo_orderdate = d_datekey И d_year = 1993 И lo_discount МЕЖДУ 1 И 3 И lo_quantity ‹ 25 UNION ALL SELECT SUM(lo_extendedprice * lo_discount) КАК доход ОТ mongo.test.ssb_europe ssb ГДЕ ssb.orderdate.d_year = 1993 И lo_discount МЕЖДУ 1 И 3 И lo_quantity ‹ 25 );
Конфигурация (drill-override.conf):
На буровой установке A (Windows Server 2008): Drill.exec: { идентификатор кластера: "drillbits1", zk.connect: "serverA:2181", олицетворение: {enabled: true, max_chained_user_hops: 3}}
На буровой установке B (Cloudera CDH 5.8.0): Drill.exec: { идентификатор кластера: "drillbits1", zk.connect: "serverA:2181", олицетворение: {enabled: true, max_chained_user_hops: 3}}