gần đây tôi muốn tải các tệp nhật ký vào bảng hive, tôi muốn có công cụ có thể đọc dữ liệu từ một thư mục nhất định và tự động tải chúng vào tổ ong. Thư mục này có thể bao gồm nhiều thư mục con, ví dụ, thư mục nhất định là '/ log' và các thư mục con là '/ log/20130115', '/ log/20130116', '/ log/201301017'. Có một số công cụ ETL có thể đạt được chức năng đó: khi dữ liệu mới được lưu trữ trong thư mục nhất định, công cụ có thể tự động phát hiện dữ liệu này và tải chúng vào bảng hive. Có những công cụ như vậy không, tôi có phải tự mình viết kịch bản không?cách tải dữ liệu trong hive tự động
Trả lời
Bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng bảng bên ngoài Hive và phân vùng bảng của bạn theo ngày. Ví dụ, tạo bảng của bạn như vậy:
create external table mytable(...)
partitioned by (day string)
location '/user/hive/warehouse/mytable';
này về cơ bản sẽ tạo ra một bảng trống trong metastore và làm cho nó trỏ đến /user/hive/warehouse/mytable
.
Sau đó, bạn có thể tải dữ liệu của bạn trong thư mục này với phím định dạng = giá trị nơi chính là tên phân vùng của bạn (ở đây "ngày") và giá trị là giá trị của phân vùng của bạn. Ví dụ:
hadoop fs -put /log/20130115 /user/hive/warehouse/mytable/day=20130115
Sau khi dữ liệu của bạn được tải ở đó, nó đang ở trong thư mục HDFS, nhưng metastore Hive chưa biết rằng nó thuộc về bảng, do đó bạn có thể thêm nó theo cách này:
alter table mytable add partition(day='20130115');
Và bạn nên làm tốt, di chuyển sẽ được cập nhật với phân vùng mới của bạn và bây giờ bạn có thể truy vấn bảng của bạn trên phân vùng này.
này nên được tầm thường để kịch bản, bạn có thể tạo một công việc cron chạy mỗi ngày một lần mà sẽ thực hiện những lệnh theo thứ tự và tìm các phân vùng để tải với lệnh date
, ví dụ liên tục làm lệnh này:
hadoop fs -test /log/`date +%Y%m%d`
và kiểm tra xem $?
bằng 0 sẽ cho bạn biết liệu tệp có ở đây không và nếu có, bạn có thể chuyển tệp và thêm phân vùng như được mô tả ở trên.
Bạn có thể sử dụng lệnh LOAD DATA do Hive cung cấp. Nó chính xác phù hợp với trường hợp sử dụng của bạn. Chỉ định một thư mục trong hệ thống tệp cục bộ của bạn và tạo các bảng Hive từ nó.
Ví dụ sử dụng - LOAD DATA LOCAL INPATH '/ home/user/một số thư mục' OVERWRITE VÀO bảng TABLE
- 1. Hive - tách dữ liệu trên các tệp
- 2. Có cách nào để tải dữ liệu CSV thành định dạng Hive "nhị phân" không?
- 3. nhận giá trị null trong khi tải dữ liệu từ tệp phẳng vào bảng hive
- 4. Làm cách nào để tự động tải dữ liệu trong gói R?
- 5. Giá trị ID tăng tự động của dữ liệu tải lên dữ liệu MySQL
- 6. Tự động thay đổi chú thích dữ liệu trong dự án dữ liệu động
- 7. cách tải dữ liệu động từ máy chủ trên uitableview
- 8. Làm thế nào để tải db: dữ liệu hạt giống vào cơ sở dữ liệu thử nghiệm tự động?
- 9. Tự động tạo bảng trong luồng dữ liệu SSIS
- 10. Tự động tải trong Python
- 11. ID đối tượng tự động tăng trong dữ liệu lõi?
- 12. Tạo trường DateTime trong cơ sở dữ liệu tự động?
- 13. Tự động cập nhật dữ liệu biểu đồ trong D3
- 14. Tài liệu tự động về các tập dữ liệu
- 15. Đang tải dữ liệu có nhiều dữ liệu trong ExtJS
- 16. ID tăng tự động trong cơ sở dữ liệu H2
- 17. CodeIgniter - Trang trống trên cơ sở dữ liệu tự động tải
- 18. Dữ liệu làm mới tự động hoàn thành UI UI
- 19. Cách tải siêu dữ liệu sách?
- 20. Cách tải một tệp văn bản vào bảng Hive được lưu trữ dưới dạng các tệp trình tự
- 21. Cách tải siêu dữ liệu từ ảnh?
- 22. Hive: phân vùng động thêm vào bảng bên ngoài
- 23. Cách tải lại dữ liệu trong Dòng thời gian Simile
- 24. tải dữ liệu trong một TCP ack
- 25. Làm cách nào để tự động tạo tài liệu để tải xuống trong Javascript?
- 26. Hive Chọn thành
- 27. Tải mẫu AngularJS trong trang, tự động
- 28. Hive - bảng phân vùng bên ngoài (động)
- 29. Làm thế nào để tắt tự động tải trong jqGrid?
- 30. Tự động thêm dữ liệu vào bản đồ javascript
thanks a lot, trên thực tế, tôi có một câu hỏi xa hơn, bằng cách này tôi có thể tải của tôi tuy nhiên, sếp của tôi đã yêu cầu tôi tìm cách tiếp cận hoặc công cụ để tải dữ liệu, điều đó có nghĩa là: giả sử có một thư mục nhất định được gọi là '/ log', tổ ong sẽ truy vấn thư mục này mọi lúc , khi dữ liệu mới được tạo, có thể/log/20130118,/log/20130119, tổ ong sẽ tự động thêm phân vùng này và tải tệp nhật ký như/20130118 hoặc/20130119 vào phân vùng của bảng, cách tôi có thể đạt được điều đó, cầu xin sự tha thứ của bạn –
Khi bạn chỉ định từ khóa 'EXTERNAL' dữ liệu của bạn không được sao chép ở bất kỳ đâu và ở lại vị trí bạn đã chạm vào nó. (Khi bạn không chỉ định 'EXTERNAL', Hive sẽ sao chép dữ liệu vào vị trí mặc định của nó). Theo tôi biết, mỗi lần bạn thêm tệp vào thư mục được chỉ định bởi 'LOCATION' và bạn truy vấn bảng của mình sau đó, dữ liệu mới sẽ hiển thị. Đã một thời gian kể từ khi tôi chơi với Hive, vì vậy có thể @Charles Menguy có thể xác nhận điều này? – Pieterjan
Tôi không chắc chắn 100% tôi hiểu những gì bạn muốn đạt được, bạn có thể chỉnh sửa câu hỏi của mình với nhiều chi tiết hơn không?Nếu bạn chỉ muốn tải các tệp phẳng vào bảng của mình mà không có phân vùng ngày, thì @Pieterjan là đúng, bạn chỉ có thể đặt các tệp ở gốc của bảng trong HDFS và bạn không cần thay đổi bảng, Hive sẽ trực tiếp chọn nó lên. –